Java中关于List,Map,Set用法整理
目录
List
List是一个继承于Collection的接口,List中的元素可以重复,并且是有序的。ArrayList,Linked,Vector都实现了List接口,是List的三种实现。
分类
ArrayList
ArrayList底层是用数组实现的。和ArrayList相比,它增删的速度较快,但是查询和修改值的速度较慢。
LinkedList
LinkedList底层是通过双向链表实现的。
Vector
Vector和ArrayList一样,都是通过数组实现的,但是Vector是线程安全的。一般都不用Vector,想要在多线程环境下使用,可以用List list = Collections.synchronizedList(new ArrayList<>());
常见用法
void add(int index,E element)
//在指定位置插入元素
boolean addAll(int index,Collection<? extends E> c)
//在指定位置插入c集合全部的元素,如果集合发生改变,则返回true,否则返回false
E get(int index)
//返回list集合中指定索引位置的元素
int indexOf(Object o)
//返回list集合中第一次出现o对象的索引位置,如果list集合中没有o对象,就返回-1
E remove(int index)
//删除指定索引的对象
E set(int index,E element)
//在索引为index位置的元素更改为element元素
Map
Map集合中的Key是不能重复的
分类
HashMap
无序,遍历时取得数据的顺序完全是随机的,最多只允许一条记录的键为null
TreeMap
能够把它保存的记录根据键排序,默认是按键值的升序排序。由于TreeMap需要排序,所以需要一个Comparator为键值比较大小,也是用来Comparator定位的。
- Comparator可以在创建TreeMap时指定,传参。
- 如果创建时没有确定,那么就会使用key.compare()方法,这就要求key必须实现Comparator接口。
- TreeMap是使用Tree数据结构实现的,所以使用Comparator接口就可以完成定位了
LinkedHashMap
保存了记录的插入顺序
常见用法
V put(K key,V value)
//向map集合中添加Key为key,Value为value的元素,当添加成功时返回null,否则返回value
void putAll(Map<? extends K,? extends V> m)
//向map集合中添加指定集合的所有元素
void clear()
//把map集合中的所有的键值删除
boolean containsKey(Object key)
//检测出map集合中有没有包含Key为key的元素,如果有则返回true,没有返回false
boolean containsValue(Object value)
//检测出map集合中有没有包含Value为value的元素,如果有则返回true,否则返回false
Set<Map.Entry<K,V>> entrySet()
//返回map到一个Set集合中
V get(Object key)
//根据map集合中的元素的Key来获取相应元素的Value
boolean isEmpty()
//检测出map集合中是否有元素,如果没有则返回true,如果有则返回false
Set<K> keySet()
//返回map集合中所有Key
V remove (Object key)
//删除Key值为key的元素
Collections<V> values()
//返回map集合中的所有的Value到一个Collection集合
Map的四种遍历方法
- 在for循环中使用entries实现Map的遍历
for(Map.Entry<Object,Object> entry:map.entrySet()){
Object key = entry.getKey();
Object value = entry.getValue();
}
- 在for循环中遍历key或values
for (Object key:map.keySet()){...}
for(Object value:map.values()){...}
- 通过Iterator遍历
Iterator<Entry<Object,Object>> entries = map.entrySet().iterator();
- 通过键找值遍历
for (Object key:map.keySet()){
Object value = map.get(key);
}
Set
不包含重复元素
分类
HashSet
采用hash来实现,其中的元素没有按顺序排列,无序
TreeSet
采用树结构(红黑树算法)实现,元素按顺序进行排列,有序
LinkedHashSet
记录插入顺序
常见用法
add()//向集合中添加元素
clear()//去掉集合中所有的元素
contains()//判断集合中是否包含某一个元素
isEmpty()//判断集合是否为空
Iterator()//返回一个Iterator对象
remove()//从集合中去掉特定的对象
size()//返回集合的大小