Java 中有两个合集父接口 Collection、Map,Collection 类型每个集合容器中只有一个元素,Map类型每个集合容器中有两个 key-value ,类似一个 No Sql。而 Collections 更像一个工具类,与前面两个不是一个性质。
1 Collection 接口类
Collection 即 java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection 接口在 Java 类库中有很多具体的实现。Collection 接口的意义是为各种具体的集合提供了最大化的统一操作方式。
例如我们常用的 map,set,list,vector 都是继承了 Collection
1.1 Collection 的父类
Collection 是 Iterable 类的扩展(extends),Iterable 类的所有的方法,Collection 都继承,都是可直接使用。
+Collection 这个接口extends自 --java.lang.Iterable接口
+List 接口
-ArrayList 类
-LinkedList 类
-Vector 类 此类是实现同步的
+Queue 接口
+不常用,在此不表.
+Set 接口
+SortedSet 接口
-TreeSet 类
-HashSet
1.2 Collection 方法与实现
Collection 本身是一个接口,他的具体方法的实现都在他的子类中实现。
方法名
说明
boolean add(E e)
向集合添加元素e,若指定集合元素改变了则返回true
boolean addAll(Collection extends E> c)
把集合C中的元素全部添加到集合中,若指定集合元素改变返回true
void clear()
清空所有集合元素
boolean contains(Object o)
判断指定集合是否包含对象o
boolean containsAll(Collection> c)
判断指定集合是否包含集合c的所有元素
boolean isEmpty()
判断指定集合的元素size是否为0
boolean remove(Object o)
删除集合中的元素对象o,若集合有多个o元素,则只会删除第一个元素
boolean removeAll(Collection> c)
删除指定集合包含集合c的元素
boolean retainAll(Collection> c)
从指定集合中保留包含集合c的元素,其他元素则删除
int size()
集合的元素个数
T[] toArray(T[] a)
将集合转换为T类型的数组
1.2.1 add
可以添加不同类型的对象。
//add 方法
Collection collection = new ArrayList();
collection.add("增加元素1,只能是单一元素");
ArrayList arrayList = new ArrayList();
arrayList.add("增加元素1,只能是单一元素");
List list = new ArrayList<>();
list.add("增加元素1,只能是单一元素");
Collection coll = new HashSet<>();
coll.add("增加元素1");
1.2.2 addAll
//add 方法可以增加重复相同元素、可以增加不同类型的元素
Collection collection = new ArrayList();
collection.add("增加元素1,只能是单一元素");
collection.add("增加元素2");
Collection coll = new HashSet<>();
coll.add("增加元素1");
coll.add("相同元素");
coll.add("相同元素");
coll.add("相同元素");
coll.add("相同元素");
//addAll
// 添加一个集合数据
collection.addAll(coll);
1.2.3 contains 是否包含
//contains 是否包含
boolean a= coll.contains("A");
boolean b = coll.contains("相同元素");
1.2.4 remove 删除指定元素
coll.remove("相同元素");
collection.removeAll(coll);
1.2.5 removeAll 删除指定集合
collection.removeAll(coll);
1.2.6 遍历的4种方法
//遍历 for (常用)
for (String str: coll
) {
System.out.println(str);
}
//遍历 forEach (Java 8 及以上版本)
coll.forEach(e->System.out.println(e));
//遍历 使用 Iterator hasNext
Iterator it=coll.iterator();
while (it.hasNext()){
String str=it.next();
System.out.println(str);
}
//遍历 利用 Iterator 的 forEachRemaining (Java 8 及以上版本)
it.forEachRemaining(str->System.out.println(str));
1.2.6 Java8 谓词(predicate)lambda表达式操作
//predicate 操作
Collection coll2 = new ArrayList<>();
// 添加0-49
for (int i = 0; i < 50; i++) {
coll2.add(i);
}
coll2.removeIf(e->(e>8 && e<20));
1.2.7 Java8 Stream 流操作
暂无
2 Map 接口类
Map 在 Java 中表示为键值对存储结构 Map,他的常用方法包括了
get(Object key) 获取指定键(key)所对应的值(value)
put(K key,V value) 将指定的键与值对应起来,并添加到集合中
remove(Object key) 根据指定的键(key)删除元素,返回被删除元素的值(value)。
+Map 接口
-HashMap 类 (除了不同步和允许使用 null 键/值之外,与 Hashtable 大致相同.)
-Hashtable 类 此类是实现同步的,不允许使用 null 键值
+SortedMap 接口
-TreeMap 类
2.1 Map 遍历
方法1 在for循环中使用entries实现Map的遍历
/**
* 方法1: Map 在for循环中使用entries实现Map的遍历
*/
System.out.println("方法1-----------------------------");
Map map = new HashMap();
map.put("car1", "red");
map.put("car2", "yellow");
map.put("car3", "blue");
for(Map.Entry entry : map.entrySet()){
String mapKey = entry.getKey();
String mapValue = entry.getValue();
System.out.println(mapKey+":"+mapValue);
}
方法2 在for循环中遍历key或者values
/**
* 方法2: Map 在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能上比使用entrySet较好
*/
System.out.println("方法2-----------------------------");
for(String key : map.keySet()){
System.out.println(key);
}
for(String value : map.values()){
System.out.println(value);
}
方法3 通过Iterator遍历
/**
* 方法3: Map 通过Iterator遍历
*/
System.out.println("方法3-----------------------------");
Iterator> entries = map.entrySet().iterator();
while(entries.hasNext()){
Map.Entry entry = entries.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+":"+value);
}
3 Collections 帮助类
Collections 即 java.util.Collections 是一个包装类,它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java 的 Collection 框架。
3.1 sort(Listlist) 对集合进行排序
对已知集合 Collection 按照自然顺序排序
List coll2 = new ArrayList<>();
// 添加0-49
coll2.add(12);
coll2.add(3);
coll2.add(2);
coll2.add(4);
coll2.add(5);
coll2.add(89);
coll2.add(1);
coll2.add(2);
coll2.add(6);
coll2.forEach(e->System.out.println(e));
Collections.sort(coll2);
coll2.forEach(e->System.out.println(e));
3.2 reverse(Listlist) 反转集合中元素的顺序
List coll2 = new ArrayList<>();
// 添加0-49
coll2.add(12);
coll2.add(3);
coll2.add(2);
coll2.add(4);
coll2.add(5);
coll2.add(89);
coll2.add(1);
coll2.add(2);
coll2.add(6);
coll2.forEach(e->System.out.println(e));
Collections.sort(coll2);
coll2.forEach(e->System.out.println(e));
Collections.reverse(coll2);
3.3 shuffle(Collection) 对集合进行随机排序
Collections.shuffle(coll2);
Random random=new Random();
random.nextInt();
Collections.shuffle(coll2,random);