JavaSE学习笔记day13

编程入门 行业动态 更新时间:2024-10-27 21:23:52

JavaSE<a href=https://www.elefans.com/category/jswz/34/1770117.html style=学习笔记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 ListLink List
特点
不同点
查询效率
删除效率
底层原理

总结:

Collection : 里面的方法都很常见,其中的方法必须记住。泛型会用就行。

迭代Iterator 或者 foreach都要会

Array List全部都是重点。创建集合,方法的使用,原理特点。

Link List 主要记住特点。

更多推荐

JavaSE学习笔记day13

本文发布于:2024-02-25 10:56:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1698740.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:学习笔记   JavaSE

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!