学习笔记day13"/>
JavaSE学习笔记day13
一,集合框架体系
定义:用来存储多个数据的一种容器,与数组不同的是。。
集合 数组 长度 可变 固定 存储的类型是否固定 数据类型不固定 数据类型固定 存储的类型 只能存储引用类型 基本和引用类型 功能 有属性和方法 没有方法,没有属性(lenght除外)
二,Collection
Collection : 是单列集合层次结构中的根接口
collection下的子实现类是:有的集合可以无序也可有序,可重复可不重复。
方法:
boolean add() 添加
boolean addAll() 添加所有
clear() 清除
size() 长度
remove() 删除
removeAll() 删除所有
contains() 判断是否包含
isEmpty() 判断是否为空
public static void main(String[] args) {// Collections 是接口的,演示需要创建子类对象,ArrayListCollection coll = new ArrayList();System.out.println(coll);coll.add("伟哥");coll.add(18);coll.add("爱吃海狗人参丸");coll.add(new Date());System.out.println(coll);// addAll(Collection c); 将集合中的所有元素,全部添加到当前集合Collection coll2 = new ArrayList();coll2.add("a");coll2.add("b");coll2.add("c");System.out.println(coll2);System.out.println(coll2.size());Collection coll3 = new ArrayList();coll3.add(1);coll3.add(2);coll3.add(3);coll3.add(coll2);System.out.println(coll3);System.out.println(coll3.size());Collection coll4 = new ArrayList();coll4.add(1);coll4.add(2);coll4.add(3);coll4.add("a");coll4.add("b");coll4.add("c");// boolean removeSystem.out.println(coll4);coll4.remove(1);System.out.println(coll4);// boolean removeAll 删除全部 可以用于删除两个集合的交集的部分元素coll4.removeAll(coll4);System.out.println(coll4);}// retainAll() 交集部分全保留,不是交集的全部删除。Collection c1 = new ArrayList();c1.add("a");c1.add("b");c1.add("c");c1.add("d");Collection c2 = new ArrayList();c2.add("a");c2.add("b");c1.retainAll(c2);System.out.println(c1);// 判断是否包含 contains()Collection c3 = new ArrayList();c3.add("a");c3.add("b");c3.add("c");System.out.println(c3.contains("c"));System.out.println(c3.contains("A"));// 判断是否为空System.out.println(c3.isEmpty());;// 清理集合c3.clear();System.out.println(c3.isEmpty());
三,泛型
泛型就是一种比较宽泛的类型定义,是一种抽象的类型。
1.作用:消除强制类型转换。
泛型使用:
在类或者方法参数定义使用泛型字母来取代之前固定的数据类型。
add(Object obj) --> add(E e)
常见的泛型字母
E(element)T(target) K(key) V(value) ?(未知)
public static void main(String[] args) {// 设置泛型,一旦设置泛型就约束了集合只能存储该类型数据Collection <String> c1 = new ArrayList<>();// 这么做的目的,为了消除强制类型转换。c1.add("a"); // 不能加入其他类型的参数。}
四,迭代(重要)
迭代(遍历),将集合元素迭代,目的是取出来元素。
Collection 根接口,提供了一个迭代器规范 iterator(),调用该方法返回
Collection<String> c = new ArrayList<>();c.add("a");c.add("b");c.add("c");c.add("d");c.add("e");// 获得迭代器(里面拥有所有元素)Iterator<String> iterator = c.iterator();// 判断有没有下一个while (iterator.hasNext()){// 有下一个就返回String e = iterator.next();System.out.println(e);
// 体会一下泛型的好处
Collection c1 = new ArrayList();c1.add("1");c1.add("2");c1.add(2);c1.add("4");c1.add("5");c1.add("6");Iterator iterator1 = c1.iterator();while (iterator1.hasNext()){String e = (String) iterator1.next();System.out.println(e);}
注意:
在迭代的过程中不能删除元素添加元素只能使用一次,必须要使用自身的添加和删除。
增强for循环
for(数据类型 变量名 : 要遍历的集合/数组){// ... } 左则的数据类型,变量要根据集合/数组类定,变量是每次循环输出的东西。
List
List 是 Collection的子接口。
List是有序的集合:有序是指迭代顺序和和插入顺序。
特点:允许有重复的元素。
提供了可以针对索引下标操作元素的方法。
List接口中的方法大部分与父类接口Collection一样
但是除此之外的方法,确实提了可以通过下标操作元素的方法
void add(int index ,E e)
E remove(int index)
E get(int index)
E set(int index,E e)
List 是接口,没有办法演示其中的方法
List接口的两个实现类,Array List 和Link List;
Array List [重点]
array List 实现了List接口,即Array List也是有序集合,允许重复元素,且那些关于下标操作集合的方法Arra List都有。
Array List 底层是数组,大小可变是指它会扩容(不是真正的变化大小)
构造方法
- ArrayList() 创建空集合,默认创建一个长度为10 的数组
- ArrayList(Collection c) 创建一个集合,集合内容直接就是有指定的参数
- ArrayList(int initialCapacity) 创建一个指初始化容量的数组。
ArrayList<Integer> list = new ArrayList<>();list.add(6);list.add(8);list.add(6);list.add(8);
// for (Integer in : list) {
// System.out.print(in);
// }System.out.println();list.remove(2);
// for (Integer in : list) {
// System.out.print(in);
// }list.add(1,7);System.out.println(list);list.set(2,0);System.out.println(list);
方法
void add(int index ,E e)
E remove(int index)
E get(int index)
E set(int index,E e)
底层原理
Array List 的底层是数组。默认的长度是10,但是存储元素多余10会扩容
如何扩容的?
- 当加入元素时,先判断加入后会不会超出默认值。
- 如果没有超出默认长度
- add(Object0 ) 元素直接放后
- add(int index,Object o) 先将该位置以后的元素依次往后移动一个,然后放放到该位置
- 当加入元素时查看会不会超过容量,如果超出就扩容 阔为原来的1.5倍。
- 将原来的数组拷贝到原来的数组
- 然后再放入新元素
特点
1,有序 2,重复 3,查询更新效率低 4,删除插入效率低
应用场景 :适用于查询频率高的地方。经常查不经常改。
并发修改异常。
Linked List
是list的实现类,也是可以重复,有序,
且Link List集合也有关于下标的操作的集的方法,但是还提供一些,关于操作开头和结尾的方法
底层是使用链表实现:
特点
1.有序
2.允许重复
3.查找更新时相对效率比较低
4。插入删除时效率比较高
LinkedList<Integer> ll = new LinkedList<>();ll.add(9);ll.add(4);ll.add(2);ll.add(8);ll.add(6);ll.add(8);System.out.println(ll);ll.add(3,5);System.out.println(ll);ll.set(3,50);System.out.println(ll);ll.remove(3);System.out.println(ll);// 特殊的方法 操作头尾// 获取一个头部System.out.println(ll.getFirst());// 获取最后一个System.out.println(ll.getLast());// 向头部插入ll.addFirst(0);System.out.println(ll);// 向尾部添加一个ll.addLast(66);System.out.println(ll);// peek() 获取移除第一个// poll() 获取并移除第一个// pop()
Array List | Link List | |
---|---|---|
特点 | ||
不同点 | ||
查询效率 | ||
删除效率 | ||
底层原理 |
总结:
Collection : 里面的方法都很常见,其中的方法必须记住。泛型会用就行。
迭代Iterator 或者 foreach都要会
Array List全部都是重点。创建集合,方法的使用,原理特点。
Link List 主要记住特点。
更多推荐
JavaSE学习笔记day13
发布评论