Java 容器之 Connection栈队列及一些常用
集合家族图
---|Collection: 单列集合---|List: 有存储顺序 , 可重复---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实现 , 增删快 , 查找慢 实现了 栈 队列 ---|Vector: 和 ArrayList 原理相同 , 但线程安全 , 效率略低 ---| Stuck 类 ---|Set: 无存储顺序 , 不可重复---|HashSet 线程不安全,存取速度快。底层是以哈希表实现的---|TreeSet 红 - 黑树的数据结构,默认对元素进行自然排序( String )。如果在比较的时候两个对象返回值为 0 , ,那么元素重复。 Comparable ,Comparator 。---|LinkedHashSet---| Map: 键值对---|HashMap 采用哈希表实现,所以无序---|TreeMap 可以对键值进行排序 ---|HashTable 线程同步
---|LinkedHashMap 对Map集合进行增删提高效率
Connection
Collection 是最基本的集合接口,一个 Collection 代表一组 Object ,即 Collection的元素( Elements )。
一些 Collection 允许相同的元素而另一些不行。一些能排序而另一些不行。
Java SDK 不提供直接继承自 Collection 的类, Java SDK 提供的类都是 继承自Collection 的 “ 子接口 ” 如 List 和 Set 。
所有实现 Collection 接口的类都必须提供两个标准的构造函数:
无参数的构造函数用于创建一个空的 Collection,
有一个 Collection 参数的构造函数用于创建一个新的 Collection ,
这个新的 Collection 与传入的 Collection 有相同的元素。
后一个构造函数允许用户复制一个 Collection 。
Connection 共性方法。 增加:1:add() 将指定对象存储到容器中 add 方法的参数类型是Object 便于接收任意对象2:addAll() 将指定集合中的元素添加到调用该方法和集合中删除:3:remove() 将指定的对象从集合中删除4:removeAll() 将指定集合中的元素删除修改5:clear() 清空集合中的所有元素判断6:isEmpty() 判断集合是否为空7:contains() 判断集合何中是否包含指定对象 8:containsAll() 判断集合中是否包含指定集合 使用equals()判断两个对象是否相等 获取: 9:int size() 返回集合容器的大小转成数组10: toArray()
List
List 特有方法 1:增加void add(int index, E element) 指定位置添加元素 boolean addAll(int index, Collection c) 指定位置添加集合 2:删除 E remove(int index) 删除指定位置元素3:修改E set(int index, E element) 返回的是需要替换的集合中的元素 4:查找:E get(int index) 注意: IndexOutOfBoundsExceptionint indexOf(Object o) // 找不到返回-1lastIndexOf(Object o) 5:求子集合List<E> subList(int fromIndex, int toIndex) // 不包含toIndex
LinkedList 非同步
链表实现 , 增删快 , 查找慢LinkedList 特有方法 1:方法介绍 addFirst(E e) addLast(E e) getFirst() getLast() removeFirst() removeLast() 如果集合中没有元素,获取或者删除元 素抛:NoSuchElementException 2:数据结构LinkedList list = new LinkedList(); 1:栈 (1.6) 先进后出push() 入栈pop() 出栈2:队列(双端队列1.5)先进先出offer() 入队poll() 出队peek() 获取队列的头元素,但是不删除peekFirst() 获取队列的头元素,但是不删除peekLast() 获取队列的最后一个元素但是不删除 3:返回逆序的迭代器对象 descendingIterator() 返回逆序的迭代器对象注意: 注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:List list = Collections.synchronizedList(new LinkedList(…));
ArrayList 非同步
数组实现 , 查找快 , 增删慢
Vector 同步
Vector: 描述的是一个线程安全的 ArrayList 。ArrayList : 单线程效率高Vector : 多线程安全的,所以效率低Vector 特有的方法void addElement(E obj) 在集合末尾添加元素E elementAt( int index) 返回指定角标的元素Enumeration elements() 返回集合中的所有元素,封装到Enumeration对象中Enumeration 接口:boolean hasMoreElements() 测试此枚举是否包含更多的元素。 E nextElement() 如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。 由 Vector 创建的 Iterator ,虽然和 ArrayList 创建的 Iterator 是同一接口,但是,因为 Vector 是同步的,当一个 Iterator 被创建而且正在被使用,另一个线程改变了 Vector 的状态(例如,添加或删除了一些元素),这时调用 Iterator 的方法时将抛出 ConcurrentModificationException ,因此必须捕获该异常。
Stack 类
Stack 继承自 Vector ,实现一个后进先出的堆栈。Stack 提供 5 个额外的方法使得 Vector 得以被当作堆栈使用。基本的 push 和 pop方法,还有 peek 方法得到栈顶的元素, empty 方法测试堆栈是否为空, search 方法检测一个元素在堆栈中的位置。 Stack 刚创建后是空栈。
迭代器
每一种集合类返回的 Iterator 具体类型可能不同,但它们都实现了 Iterator 接口,因此,我们不需要关心到底是哪种 Iterator ,它只需要获得这个 Iterator 接口即可,这就是接口的好处,面向对象的威力。Iterator it = list.iterator();Itreator 该接口是集合的迭代器接口类,定义了常见的迭代方法1:boolean hasNext() 判断集合中是否有元素,如果有元素可以迭代,就返回true。2: E next() 返回迭代的下一个元素,注意: 如果没有下一个元素时,调用 next元素会抛出NoSuchElementException3: void remove()从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操 作)。
List 特有的迭代器 ListIterator
ListIterator<E> listIterator()---| IteratorhasNext()next()remove()------| ListIterator Iterator子接口 List专属的迭代器add(E e) 将指定的元素插入列表(可选操作)。该元素直接插入到 next 返回的下一个元素的前面(如果有)void set(E o) 用指定元素替换 next 或 previous 返回的最后一个元素hasPrevious() 逆向遍历列表,列表迭代器有多个元素,则返回 true。previous() 返回列表中的前一个元素。
Set
不包含重复的元素HashSetTreeSetLinkedHashSet
Map
注意: Set 的元素不可重复, Map 的键不可重复,如果存入重复元素如何处理Set 元素重复元素不能存入 add 方法返回 falseMap 的重复健将覆盖旧键,将旧值返回。1、添加:1、V put(K key, V value) (可以相同的key值,但是添加的value值会覆 盖前面的,返回值是前一个,如果没有就返回null) 2、putAll(Map<? extends K,? extends V> m) 从指定映射中将所有映射关 系复制到此映射中(可选操作)。 2、删除1、remove() 删除关联对象,指定key对象2、clear() 清空集合对象 3、获取1:value get(key); 可以用于判断键是否存在的情况。当指定的键不存在的时候,返 回的是null。3、判断:1、boolean isEmpty() 长度为0返回true否则false2、boolean containsKey(Object key) 判断集合中是否包含指定的key 3、boolean containsValue(Object value) 判断集合中是否包含指定的value 4、长度: Int size() 遍历Map的方法1、将map 集合中所有的键取出存入set集合。Set<K> keySet() 返回所有的key对象的Set集合再通过get方法获取键对应的值。 2、 values() ,获取所有的值.Collection<V> values() 不能获取到key对象 3、 Map.Entry对象 推荐使用 重点Set<Map.Entry<k,v>> entrySet() 将map 集合中的键值映射关系打包成一个对象 Map.Entry对象通过Map.Entry 对象的getKey, getValue获取其键和值。// 获取方法:// 第一种方式: 使用keySet// 需要分别获取key和value,没有面向对象的思想// Set<K> keySet() 返回所有的key对象的Set集合Set<Integer> ks = map.keySet();Iterator<Integer> it = ks.iterator();while (it.hasNext()) {Integer key = it.next();String value = map.get(key);System.out.println("key=" + key + " value=" + value);}// 第二种方式:// 通过values 获取所有值,不能获取到key对象// Collection<V> values()Collection<String> vs = map.values();Iterator<String> it1 = vs.iterator();while (it1.hasNext()) {String value = it1.next();System.out.println(" value=" + value);}// 第三种方式: Map.Entry对象 推荐使用 重点// Set<Map.Entry<K,V>> entrySet()// 返回的Map.Entry对象的Set集合 Map.Entry包含了key和value对象Set<Map.Entry<Integer, String>> es = map.entrySet();Iterator<Map.Entry<Integer, String>> it2 = es.iterator();while (it2.hasNext()) {// 返回的是封装了key和value对象的Map.Entry对象Map.Entry<Integer, String> en = it2.next();// 获取Map.Entry对象中封装的key和value对象Integer key = en.getKey();String value = en.getValue();System.out.println("key=" + key + " value=" + value);}
HashMap
底层是哈希表数据结构,线程是不同步的,可以存入 null 键, null 值。 要保证键的唯一性,需要覆盖 hashCode 方法,和 equals 方法。
Map<String, Integer > map1 = new HashMap<String, Integer >();
HashMap<Person, String> hm = new HashMap<Person, String>();
TreeMap
自定义元素排序
class MyComparator implements Comparator<Person> {@Overridepublic int compare(Person p1, Person p2) {if (p1.getAge() > p2.getAge()) {return -1;} else if (p1.getAge() < p2.getAge()) {return 1;}return p1.getName().compareTo(p2.getName());}}
Java 容器之 Connection栈队列及一些常用相关推荐
- java中定义一个栈容器_Java 容器之 Connection栈队列及一些常用
集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...
- Java 容器之Hashset 详解.
? 在之前的博文中本屌已经介绍过java的Collection接口. 作为实现了Collection接口的容器中, List容器无疑是最常用的, 无论是Arraylist, Linklist, Vec ...
- Java集合常见数据结构-栈/队列/数组/链表/红黑树
数组 链表 红黑树
- Java容器之HashMap源码解析(视频讲解)
内容简介:讲解HashMap的底层数据结果.处理逻辑和源码实现.首先通过画图模拟HashMap的数据结果和底层处理逻辑:然后解析put和get方法,印证模拟中的原理:通过解读源码,讲解单向链表转换成红 ...
- 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)
常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...
- 【转】Java并发编程:并发容器之ConcurrentHashMap
JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了 ...
- Java并发编程:并发容器之CopyOnWriteArrayList(转载)
Java并发编程:并发容器之CopyOnWriteArrayList(转载) 原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW ...
- java 栈 队列 接口_Java队列接口
java 栈 队列 接口 介绍: 队列是FIFO(先进先出)抽象数据类型(ADT). 换句话说,按插入顺序将元素删除. java.util.Queue是Java 中的接口,并且从java.util.C ...
- Java:基于LinkedList实现栈和队列
1.提供一组栈的接口,其底层关联到一个LinkedList(双端队列)实例.由于只暴露部分基于栈实现的接口,所以可以提供安全的栈实现. package junit;import java.util.L ...
最新文章
- OpenStack文件注入相关分析(转载)
- Spring Boot 以 jar 包方式运行在后台
- 三面腾讯,已拿offer
- 中国最大的python社区-python找最大值
- BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介、下载、案例应用之详细攻略
- 网络爬虫:采用“负载均衡”策略来优化网络爬虫
- 科大星云诗社动态20201122
- (20):数据的准备工作
- Oracle on Azure
- [BZOJ1385][Baltic2000]Division expression
- 【ZOJ - 3778】Talented Chef(贪心)
- 基于链表的两个集合的差集
- mysql更改执行计划_11g中 connect by 语句执行计划改变
- [c#基础]关于const和readonly常见的笔试题剖析
- 水中贵族 || 百岁山的“骚路子”营销
- Shawn邀您共读《WebGL编程指南》| GLSL ES篇
- 什么是端口映射?如何设置端口映射?
- 升级opengl和显卡驱动_到底用不用更新显卡驱动
- uni-app开发App上架Apple Store流程(简略版)
- Git - git 入门