java集合
集合类在 java.util包下 支持多线程的集合在 java.util.concurrent 下
List:有序、可重复,可通过索引访问
Set:无序、不可重复集合
Queue:队列集合
Map:key-value集合
Collection接口常用方法
1. List
有序、可重复
默认按元素添加顺序设置元素索引
(1)ArrayList
动态数组,可插入任何符合规则的元素(null都可以)
创建对象时,该对象有初始容量,当快不够存储新的元素时,就扩容,每次增长 0.5 倍
ArrayList不是同步的,多线程下需要加入同步操作
循环优先使用普通for循环,其次foreach
(2)LinkedList
内部用双向链表组织元素
循环优先使用 iterator遍历
(3)Vector
类似ArrayList,但Vector是同步的。扩容时每次增长1 倍。
(4)Stack
push()
pop()
peek() 获取栈顶元素
empty()
search() 元素在栈中位置
(5)迭代器
Iterator接口:
boolean hasNext() 判断集合里是否还存在下一个元素
Object next() 返回集合里下一个元素
void remove() 删除集合里上一次next方法返回的元素
ListIterator接口继承自Iterator接口:
boolean hasPrevious() 集合里是否存在上一个元素
Object previous() 返回集合里上一个元素
void add(Object o) 在指定位置插入一个元素
2. Queue
3. Set
无序、不可重复集合
(1)HashSet
基于hash算法存储元素---存取元素快
非线程同步
集合元素值可为null
添加元素时如果两个不同的值计算出了相同的hash code,则将这两个元素以链式结构保存在同一位置
(2)LinkedHashSet
非线程同步
基于HashSet,但使用链表维护元素【元素序基于添加顺序】
(3)TreeSet
使用红黑树存储元素,因此有序
非线程同步
排序:
①自然排序:对于自定义类需要实现Comparable接口以明确比较方法
②定制排序:要实现Comparator接口
(4)EnumSet
枚举类集合类
不允许null值
基于Enum类内的定义顺序决定集合元素顺序
HashSet添加、查询元素快,但是无序
LinkedHashSet基于链表,插入和删除比HashSet慢,但遍历更快
TreeSet基于红黑树,有序
---------------------------------------------------------------------------------------------
Map
Map常用方法:
(1)HahsMap、HashTable
HashMap非线程同步 HashTable是线程同步的(最好使用ConcurrentHashMap来保证线程安全)
HashMap可用null作为key或value HashTable不允许
容量:HashMap默认使用2的幂次方作为哈希表的大小
底层结构:
①HashMap在jdk1.8之前用 数组+链表 实现的散列表实现(hash相同时,就将数据放在同一条链表上)。JDK1.8之后,在链表长度大于阈值(默认8)时,将链表转化为红黑树,减少搜索时间
(2)LinkedHashMap
采用双向链表维护key-value键值对的次序(与插入顺序一致)
访问元素时较快
(3)Properties
HashTable的子类,key和value都是String类型,常用来读取配置文件
(4)TreeMap
SortedMap的实现类,基于红黑树,对key排序
①自然排序:Comparable接口指定排序方法
②定制排序:传入Comparator对象,由此对象对key排序
Map的遍历:
(1)
for(String key:map.keySet()) { String val = map.get(key); }
(2)
Iterator<Map.Entry<String,String>> it = map.entrySet().iterator(); while(it.hasNext()) { Map.Entry<String,String> entry = it.next(); String key = entry.getKey(); String val = entry.getValue(); }
(3)
for(Map.Entry<String,String> entry:map.entrySet()) { String key = entry.getKey(); String val = entry.getValue(); }
----------------------------------------------------------------------------------------------------------------------------------------------
迭代器
1. 迭代器遍历集合时,不能用集合的方法添加、删除元素