// 生活中也有集合的概念,是一个动词
// Java中的集合是一个名词,数据的一种容器,用于容纳数据
// Java提供了完整的集合框架
// TODO 问题:什么时候需要一个容纳数据的容器,也就是集合对象?
// Java集合框架中包含了对不确定个数的数据处理的集合类
// TODO 问题:如果只是为了容纳数据,可以直接使用数组,为什么要学习集合?
// 数组使用起来不方便,在数据不确定的场合下,数组使用起来不方便
// TODO 总结:对不确定的有关系的数据进行相同的逻辑处理的场合,使用集合是一个不错的选择
// TODO 根据数据的不同,Java 的集合分为2大体系:
// 1.单一数据体系 :Collection接口定义了相关的规则
// 2.成对出现的数据体系 :Collection接口定义了相关的规则
// 所谓的成对的数据,就是2个数据他有关系,可以根据第一个数据关联到第二个数据
// 也称之为键值对数据,(350722200103211814,zhangsan)=>(key,value)
// 1.Collection接口
// 常用的子接口
// List : 按照插入顺序保存数据,数据可以重复的
// 具体的实现类:ArrayList,LinkedList
// Set : 集,无序保存,数据不能重复
// 具体的实现类:HashSet
// Queue : 队列
// 具体的实现类:ArrayBlockingQueue
// 2.Map接口
// 具体的实现类:HashMap ,Hashtable
// TODO 集合 - Collection - List
// ArrayList : Array + List
// TODO List : 列表,清单
// 按照数据插入顺序进行存储
// TODO Array : 数组,陈列
// TODO 创建第一个集合对象:ArrayList
ArrayList list = new ArrayList();
// 1. 不需要传递构造参数,直接new就可以,底层数组为空数组
// 2. 构造参数需要传递一个int类型的值,用于设定底层数组的长度
// 3. 构造参数需要传递一个Collection集合类型的值,用于将其他集合中的数据放置在当前集合中
// TODO 增加数据
// add方法可以增加数据,只要将数据作为参数传递到add方法即可
// 添加数据时,如果集合中没有任何数据,那么底层会创建长度为10的数组
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
list.add("zhaoliu");
// TODO 访问集合中的数据
// 获取集合中数据的条数
System.out.println(list.size());
// 获取指定位置的数据,可以采用索引的方法
System.out.println(list.get(1));
// 遍历集合中的数据
for ( int i = 0; i < list.size(); i++){
//System.out.println("集合中的数据:" + list.get(i));
}
// TODO 如果循环遍历集合数据时,不关心数据的位置,那么可以采用特殊的for循环
// for (循环对象 对象名称 : 集合) { 循环代码 }
for ( Object obj : list ) {
System.out.println("集合中的数据:" + obj);
}
// TODO 修改数据
// 将指定位置(索引)的数据修改,set方法需要传递两个参数,第一个参数表示数据的位置(索引位置),第二个参数表示修改的值
// 方法会返回结果,这个结果就是更新前的值
Object oldValue = list.set(1, "zhaoliu");
System.out.println("修改前的值:" + oldValue);
// TODO 删除数据
// 将指定位置(索引)的数据删除,remove方法需要传递1个参数,第一个参数表示数据的位置(索引位置)
// 方法会返回结果,这个结果就是删除的值
Object removeValue = list.remove(1);
System.out.println("删除的值:" + removeValue);
// TODO 打印集合对象
System.out.println(list);
// ArrayList的常用方法
ArrayList list = new ArrayList();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
// add方法是可以传递2个参数的,第一个参数表示数据增加的位置(索引),第二个参数表示数据
list.add(1,"zhaoliu");
ArrayList otherList = new ArrayList();
otherList.add("1");
otherList.add("2");
otherList.add("zhangsan");
list.addAll( otherList );
// size方法表示集合内部数据的数量
System.out.println(list.size());
// 清空集合中的数据
// list.clear();
// 删除指定集合中的数据
//list.removeAll( otherList );
// 判断集合中的数据是否为空
System.out.println(list.isEmpty());
// 用于判断集合中是否存在某条数据,返回布尔类型的值
System.out.println(list.contains("zhangsan"));
// 用于获取数据在索引中的第一个位置,如果数据不存在,那么返回 -1
System.out.println(list.indexOf("zhangsan"));
System.out.println(list.lastIndexOf("zhangsan"));
Object[] objects = list.toArray(); // 把集合转为数组类型
for (Object obj : list) {
System.out.println(obj);
}
// 复制新集合
Object clone = list.clone();
ArrayList list1 = (ArrayList) clone;
System.out.println(list);
System.out.println(list1);
// LinkedList : Linked(连接) + List
// 构建集合对象
LinkedList list = new LinkedList();
// 增加第一个数据
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
// list.addFirst("lisi");
// list.add(1,"wangwu");
// TODO 获取数据
// System.out.println(list.getFirst());
// System.out.println(list.getLast());
// TODO 获取数据(遍历数据)
//System.out.println(list.get(1));
// for ( int i = 0; i < list.size(); i++) {
// //System.out.println(list.get(i));
// }
//
// for (Object obj : list) {
// System.out.println(obj);
// }
// TODO 修改数据
//list.set(1,"zhaoliu");
// TODO 删除数据
list.remove("wangwu");
// TODO 打印集合的数据
System.out.println(list);
// LinkedList : Linked(连接) + List
// 构建集合对象
LinkedList list = new LinkedList();
// 追加数据
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
// 向指定位置增加数据
// list.add(1,"zhaoliu");
// list.addFirst("1");
// list.addLast("2");
// LinkedList list1 = new LinkedList();
// list1.add("zhangsan1");
// list1.add("lisi2");
// list1.add("wangwu3");
// list.addAll(list1);
// System.out.println(list.remove("1"));
// System.out.println(list.remove()); // 删除第一个
// list.removeFirst();
// list.removeLast();
// list.remove(2);
//System.out.println(list.size());
//System.out.println(list.isEmpty());
//list.clear();
//list.contains( "1" );
//System.out.println(list.element()); // 获取第一个数据
//System.out.println(list.indexOf(""));
//System.out.println(list.lastIndexOf(""));
list.push("aaa"); // 添加数据至第一个
// poll是队列 数据结构 实现类的方法,从队首获取元素,同时获取的这个元素将从原队列删除;
// pop是栈结构的实现类的方法,表示返回栈顶的元素,同时该元素从栈中删除,当栈中没有元素时,调用该方法会发生异常
//System.out.println(list.pop()); // 弹出第一个数据并返回弹出的值
System.out.println(list.poll()); //获取第一个元素并删除
System.out.println(list);