索引目录
1概况
2Collection
1通用
2Set
3List
4Queue
3Map
4Collections
重点
HashSet、ArrayList、HashMap
一、总体概况
set无序无重
list有序重复
map映射,key不可重
queue
集合只能存对象,因此基本数据类型需要包装类
两类接口Collection 和Map
二、Collection
Collection旗下是List,Set,Queue
1通用函数
add(Object o) 添加一个元素
addAll(Collection c)添加一个容器中的所有元素
clear()清空
contains(Object o)是否有元素
containsAll(Collection c)是否有一个容器中的全部
isEmpty()是否空
iterator()返回智能指针
remove(Object o)删除元素
removeAll(Collection c)变成与c的差集
retainAll(Collection c)变成与c的交集
size()元素个数
toArray()用一个数组接收,变数组
迭代器Iterator
hasNext()是否还有元素
next()变成下一个元素
remove()删除当前元素
2Set
Set通过equals进行判断,而不是==,即 “hello” != new String(“hello”), “hello”.equals(new String(“hello”))
HashSet
元素可以为null
不同步,需要通过代码进行线程保护
由于可以通过iterator来对HashSet中的值进行修改,因此要注意值得问题,如果出现相同,那么在删除的时候,由于计算hashcode,只会把对应位置上的值删了,而被修改的值仍被保留,即其判断条件是equals && hashcode
LinkedHashSet记录插入顺序
TreeSet(SortedSet接口的实现类)(红黑树结构)
cofamparator() 元素需要继承Comparable接口(compareTo方法)(compareTo不等才会添加值)(匿名内部类)
first()第一个元素
last()最后一个元素
lower(Object e)小于e的最大值
higher(Object e)大于e的最小值
subSet(fromElement, toElement) 抽取子集
headSet(toElement) 抽取小于toElement的集合
tailSet(fromElement)抽取大于等于fromElement的集合
匿名内部类比较规则写法
TreeSet ts = new TreeSet(new Comparator()
{
public int compare(Object o1, Object o2)
{
M m1 = (M)o1;
M m2 = (M)o2;
return m1.age - m2.age;
}
});
EnumSet 不允许null
3List
add(int index, Object element)指定位置添加元素
addAll(int index, Collection c)指定位置添加一个容器的元素
get(int index) 获取该位置上的值
indexOf(Object o)获取第一次出现的未知
lastIndexOf(Object o)获取最后一次出现的未知
remove(int index)删除某个位置上的元素
set(int index,Object element)更改指定位置上的值
subList(int fromIndex, int toIndex)抽取指定范围的子集
ListIterator
hasPrevious()是否有上一个元素
previous()返回上一个元素
add() 指定位置插入元素
ArrayList与Vector几乎等同,ArrayList线程不安全,Vector线程安全,Vector由于太老旧,重复内容过多,因此尽可能不适用Vector
Stack继承Vector,栈,同样太老旧,如需要栈结构可以考虑LinkedList以及ArrayDeque
4Queue
element()获取头元素
offer(Object e)将元素加入到对胃
peek()获取头元素。可返回null
poll()获取头元素并删除,可返回null
remove()获取头元素并删除
PriorityQueue优先队列,按照从小到大的顺序输出存放
Deque接口(双端队列,Queue的子接口)
addFirst(Object e)在开头插入元素
addLast(Object e)在末尾插入元素
descendingIterator()返回迭代器
getFirst()获取第一个元素,不删除
getLast()获取最后一个元素,不删除
offerFirst(Object e)指定元素插入到开头
offerLast(Object e)指定元素插入到末尾
peekFirst()获取第一个元素不删除,可返回null
peekLast()获取最后一个元素不删除,可返回null
pollFirst()获取第一个元素并删除,可返回null
pollLast()获取最后一个元素并删除,可返回null
pop()弹出栈顶元素
push(Object e)压入元素
removeFirst()获取并删除第一个元素
removeFirstOccurrence(Object o)删除第一次出现指定元素
removeLast()获取删除最后一个元素
removeLastOccurrence(Object o)删除最后一次出现的指定元素
LinkedList
实现机制 | 随机访问排名 | 迭代操作排名 | 插入操作排名 | 删除操作排名 | |
---|---|---|---|---|---|
数组 | 连续内存 | 1 | 不支持 | 不支持 | 不支持 |
ArrayList/ArrayDeque | 数组 | 2 | 2 | 2 | 2 |
Vector | 数组 | 3 | 3 | 3 | 3 |
LinkedList | 链表 | 4 | 1 | 1 | 1 |
遍历List,对于ArrayList,Vector使用get,对于LinkedList用Iterator
经常插入、删除,用LinkedList
三、Map
Map
clear()清空
containsKey(Object key)是否包含key
containsValue(Object value)是否包含value
entrySet()返回key-value组成的Set集合,每个集合元素为Map.Entry对象
get(Object key)获取指定key的value,无key则为null
isEmpty()是否空
keySet()返回所有key组成的Set
put(Object key, Object value)添加/覆盖一组键值对key-value
putAll(Map m)添加/覆盖一组容器中的键值对
remove(Object key)删除指定键值对,返回其值
size()查看键值对数量
values()返回所有value组成的Collection
Map.Entry
getKey()获得Entry中的Key
getValue()获得Entry中的value
setValue(V value)修改Entry中的value
Hashtable线程安全HashMap线程不安全
Hashtable不允许null出现,HashMap可以
LinkedHashMap
Properties(Hashtable的子类)
getProperty(String key)获取对应值
getProperty(String key,String defaultValue)获取对应值,如不存在则指定默认值
setProperty(String key,String value)添加键值对
load(InputStream inStream)读取属性文件
store(OutputStream out,String comments)写入属性文件
TreeMap
firstEntry() 返回key最小对应的键值对
firstKey()返回最小key对应的值
lastEntry()返回最大key对应的键值对
lastKey()返回最大key对应的值
higherEntry(Object key)返回大于key的最小值对应的键值对
higherKey(Object key)返回大于key的最小值对应的key
lowerEntry(Object key)返回小于key的最大值对应的键值对
lowerKey(Object key)返回小于key的最大值对应的key
subMap(Object fromKey, boolean fromInclusive, Ibject toKey, boolean toInclusive)从fromKey(fromIclusive是否包含该点)到toKey(toInclusive是否包含该店)的子集
subMap(Object fromKey, Object toKey)截取fromKey(包含)到toKey(不含)的子集
tailMap(Object fromKey)截取大于fromKey的子集
tailMap(Object fromKey, boolean inclusive)截取大于fromKey(inclusive是否包含)的子集
headMap(Object toKey)截取小于toKey的子集
headMap(Object toKey, boolean inclusive)截取小于toKey(inclusive是否包含)的子集
WeakHashMap弱引用HashMap,可能会被gc回收,自带删除值,即里面的内容需要外部的强引用,从而避免被回收
IdentityHashMap 需要完全相同 == 而非 equals(“java”想通了,但是“语文”不相同,不大理解,可能是因为大于127了)
HashMap与Hashtable速度相当,机制近乎一样。但Hashtable需要维护线程安全
TreeMap慢,但是key值一直有序,并且查找较快
一般情况下使用HashMap,如果需要一直有序则考虑TreeMap
四、Collections
工具类Collections
对于List
reverse(List list)反转
shuffle(List list)随机排序
sort(List list)升序
sort(List list, Comparator c)按照Comparator提供的规则进行升序
swap(List list, int i, int j)交换list的i和j的值
rotate(List list, int distance) distance为正,则将后distance个元素移动到前面,distance为负,则将前distance个元素移动到后面
binarySearch(List list, Object key)list有序的情况下二分查找key的索引
max(Collection coll)返回集合中最大的元素
max(Collection coll, Comparator comp)根据Comparator返回集合中最大的元素
min(Collection coll)返回集合中最小的元素
min(Collection coll, Comparator comp)根据Comparator返回集合中最小的元素
fill(List list, Object obj)指定obj替换list中的所有元素
frequency(Collection c, Object o)返回指定元素出现的次数
indexOfSubList(List source, List target)返回target在source第一次出现的位置索引
lastIndexOfSubList(List source, List target)返回target在source最后一次出现的位置索引
replaceAll(List list, Object oldVal, Object newVal)使用一个newVal替换list中的所有oldVal
synchronizedXxx() 包装成线程同步 Set s = Collections.synchronizedSet(new HashSet())
emptyXxx() 不可变的空集
singletonXxx()不可变的单一实例集
unmodifiableXxx返回集合不可变的试图
Enumeration除非特殊情况否则不使用,过于古老,只能便利Vector,Hashtable