1、Collection接口
数据都是单个单个的存储在其中的。
常用方法:
boolean add(Object element) 添加元素
boolean remove(Object element) 删除元素
boolean contains(Object element) 查找该元素,没有返回false,有则返回位置。
int size() 返回容器大小。
boolean isEmpty() 是否为空的。
void clear() 清空容器。
Iterator interator() 获取迭代器。
boolean containsAll(Collection c) 是否包含c容器中所有元素。
boolean addAll(Collection c) 把c中的所有元素加到此容器中。
boolean remove(Collection c) 移除本容器和c都有的元素。
boolean retainAll(Collection c) 留下和c的交集。
Object [] toObject() 转化成Object数组。
1.1 List接口
继承了Collection接口,有序!可以通过索引进行操作。(有序指的是存放顺序与放入顺序一致)
常用方法:
void add(int index ,Object e) 在指定位置插入元素。
Object set(int index , Object e) 修改指定位置元素。
Object get(int index) 获取指定位置元素。
Object remove(int index); 删除指定位置元素。
int indexOf(Object o) 返回该元素第一次出现的位置。
int lastIndexOf(Object o) 返回该元素最后一次出现的位置。
实现类:
ArryList 内部使用一个会自己扩容的数组实现,查询效率高,增删效率低,线程不安全。
LinkedList 内部使用双向链表实现,查询效率低,增删效率高,线程不安全。
Vector 使用数组实现的,它相关方法增加了同步检查,线程安全!
1.2 Set接口
继承了Collection接口,元素不能重复,无序。(无序指的是存放顺序与放入顺序不一致)
要取值出来可以用增强for循环遍历取出。
常用方法:
见Collection接口常用方法。
实现类:
HashSet 使用HashMap实现,查询、增删效率都高,线程不安全,允许值为null。
TreeSet 对内容自动进行排序,排序规则可以自行确定(继承Comparable接口,重写compareTo方法),使用TreeMap实现。
1.3 迭代器Interator
用来遍历容器中的值。
常用方法:
hasNext() 判断是否有下一个元素。
next() 返回游标所在元素,并把游标指向下一个位置。
remove() 删除游标所在位置的元素,在next后该操作只能执行一次。
使用形式:
Iterator itr = Cllection的子类对象.iterator(); while(itr.hasNext()){ itr.next(); }
1.4 Collections工具类
它提供了一些操作Collection容器的简单方法:
sort(List list) 排序,由小到大。
shuffle(List list) 打乱,随机排序。
reverse(List list) 逆序,头尾颠倒。
fill(List list , Object o) 用o重写整个list。
int binarySearch(List list , Object o) 二分法在list中查找o,记得先给list排好序,不然会找不到!
2、Map接口
基于Key和Value的结构存储数据,Key不能重复,value可以重复。
常用方法:
V put(K key , V value) 添加一对key、value到集合中。
void putAll(Map m) 把m中所有元素加入到集合中。
V remove(Object key) 删除key对应的value。
V get(Object key) 获取key对应的value。
boolean containKey(Object key) 判断是否存在key。
boolean containValue(Object value) 判断是否存在value。
Set keySet() 获取所有的key,存放到Set集合中。
Set<Map.Entry<K,V>> entrySet() 返回一个Set,里面存放的是Map内的一个泛型接口Entry<K,V>,包含了集合的所有映射。
void clear() 删除Map中所有映射。
实现类:
TreeMap 使用红黑树实现的,效率比HashMap低,但是它自动排序,排序规则(继承Comparable接口,重写compareTo方法)。
HashMap 使用哈希表存储数据,如果新进来的值key重复,则会覆盖旧值。
遍历Map方式一:通过Key集合遍历。
Set<Integer> set = map.keySet(); for(Integer i:set){ //i为key System.out.println("key:"+i+"\nvalue:"+map.get(i)); }
遍历Map方式二:转为Set,再遍历。
/** * entrySet返回一个Set集合,这个集合中存放的是Map.Entry<K,V>, * 看源码,易知Entry是Map的一个内部接口,它有三个方法:getKey()/getValue()/setValue()。 */ Set<Map.Entry<Integer,String>> set=map.entrySet(); for(Map.Entry<Integer,String> temp:set){ //获得key和value temp.getKey() temp.getValue(); //可以改变内部的值 temp.setValue("love"); }
遍历Map方式三:转为Set,使用迭代器。
//map把映射内容丢入一个Set<Map.Entry<K,V>>集合中,然后通过.iterator获得这个Set的迭代器 Iterator<Map.Entry<Integer,String>> it = map.entrySet().iterator(); while(it.hasNext()){ Map.Entry<Integer,String> temp =it.next(); System.out.println(temp.getKey()+"->"+temp.getValue()); }
解释一个难以理解的方法:
entrySet()方法
它实现了HashMap对象转为Set对象,这样就可以使用迭代器Iterator进行遍历了。
但是Set对象里面存放的比较特殊,是一对数据,Map.Entry<K,V>。
这个数据有getKey,getValue,setValue三个方法。
标签:总结,容器,Set,Java,Map,Object,boolean,key,元素 From: https://www.cnblogs.com/lurenjia-bky/p/16950540.html