1 Collection(接口)) 是用来存储管理一组对象objects,这些对象一般被称为元素elements
List(接口))(线性结构) 可以中间位置插入删除,其中的元素相对有序
Queue(接口) 元素相对有序,可以头插,头删,也可以尾插,尾删
Deque 双端队列 (接口) 是指两端都可以进行入队列和出队列操作
Set(接口)) 元素不要求顺序. 元素不能重复,1 2 3和1 3 2是相同的set.
Set:
TreeSet(类) 基于二叉搜索树实现(元素是无序的)
HashSet(类) 基于哈希表实现(元素是有序的)
Queue:
LinkedList(类)->Deque 链表
PriorityQueue(类) 不是简单的先进先出,而是由优先级决定
List :
Vector(类) 旧版本的顺序表,现在不常用
Stack(类) 栈,先进后出
ArrayList(类) 顺序表(数组的进阶版本)
LinkedList(类) 链表
2 Map(接口)) 存放的是一组键值对(当前互联网分布式系统的理论基础) Map中的key不能重复,可以通过key找到对应的value.
TreeMap(类) 基于二叉搜索树实现
HashMap(类) 基于哈希表实现(Hash这种思想方法很重要)
1 Collection接口说明:
(1) Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性.
(2) Collection包含了List和Set两大分支.
集合同数组的比较:
(1) 数组长度一旦固定,不能再改变,集合的长度是可以改变的。
(2) 数组只能保存相同类型的数据,集合可以保存指定类型或其子类型的数据。
(3) 数组在使用的时候相对比较麻烦,集合可以利用多种方法,还有工具类.
public static void main(String[] args) {
//1.创建Collection
Collection<String> collection=new ArrayList<>();
//泛型里的参数必须是引用类型,不能是内置类型,可以用包装类解决
//2.使用size方法
System.out.println(collection.size());
//3.使用isEmpty方法
System.out.println(collection.isEmpty());
//4.使用add方法插入
collection.add("我");
collection.add("爱");
collection.add("Java");
System.out.println(collection);
//5.再次使用size和isEmpty
System.out.println(collection.size());
System.out.println(collection.isEmpty());
//6.可以toArray把Collection转化成数组
//得到的结果是Object[]
Object[] array=collection.toArray();
System.out.println(Arrays.toString(array));
//7.直接使用for循环遍历集合中的元素
//(1) 用for each循环来写比较简单.
for(String s:collection){
//s就会指向collection中的每一个元素
System.out.println(s);
}
//(2) 也可以使用迭代器
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
System.out.println(next);
}
//8.使用contains方法判断元素是否存在
System.out.println(collection.contains("我"));
//9.使用remove来删除元素
collection.remove("我");
System.out.println("删除之后的:");
for(String s:collection){
System.out.println(s);
}
//10.使用clear方法清空所有元素
collection.clear();
System.out.println(collection.size());
}
2 Map接口:
public static void main(String[] args) {
//1.创建Map实例,泛型参数有两个,第一个参数是key的类型,第二个参数是value的类型
//key value这种结构是为了跟据key找到对应的value
Map<String, String> map = new HashMap<>();
//2.使用size获取到元素个数(键值对个数)
System.out.println(map.size());
//3.使用isEmpty查看是否为空
System.out.println(map.isEmpty());
//4.使用put方法把一些键值对存放进去
map.put("及时雨", "宋江");
map.put("玉麒麟", "卢俊义");
map.put("智多星", "吴用");
map.put("入云龙", "公孙胜");
map.put("及时雨","songjiang");
//如果两个key值重复,后者value就会覆盖前者
//5.使用get方法跟据key来查找对应的value,如果key不存在,返回null
// getOrDefault如果key不存在,返回默认值
System.out.println(map.get("及时雨"));
System.out.println(map.get("玉麒麟"));
System.out.println(map.get("大刀"));
System.out.println(map.getOrDefault("行者", "武松"));
//6.通过containsKey和containsValue判断某个值是否存在
//containsKey执行效率高,containsValue执行效率低,不推荐
System.out.println(map.containsKey("智多星"));
System.out.println(map.containsValue("公孙胜"));
//7.foreach遍历Map中所有的键值对
// Entry:表示一个"条目",也就是一个键值对
// map.entrySet获取到所有的键值对
//Map中的元素和插入顺序无关,取决于具体的实现方式
for (Map.Entry<String, String> x : map.entrySet()) {
System.out.println(x.getKey() + ": " + x.getValue());
}
map.remove("入云龙");
System.out.println("删除元素后:");
//entrySet 就包括了keySet和valueSet.
for (Map.Entry<String, String> x: map.entrySet()) {
System.out.println(x.getKey() + ": " + x.getValue());
}
System.out.println(map);
//也可以直接输出map
}
3 注意:
(1) 接口 不能直接实例化, 只能构造出 对应子类 的实例 (接口都有自己的实现类).
(2) 迭代器是专门用来遍历集合类的对象.
(3) 数组获取元素个数通过 .length不带括号
(4) 字符串获取字符个数通过 .length()带括号
(5) 集合获取元素个数通过 .size()带括号.
4 接口对应的实现类: