202012.03,set集合,LinkedList集合,可变参数列表,Collections集合工具类

linkedList集合:java.util
lingedList类
是一种链表结构,增删快,查询慢,【linkedList是双向列表结构,所以有序】,内部大量封装对首节点和尾节点的操作。
|
方法

  • public void addFirst(E e);将指定元素加到首节点位置。
  • public void addLast(E e);将指定元素插入得到尾节点
  • public E getFirst();获取首节点元素
  • public E getLast();获取尾节点元素
  • public E removeFirst();删除首节点元素
  • public E removeLast();删除尾节点元素
  • public E pop();从此列表所表示的堆栈中弹出一个元素
  • public E push(E e);将元素插入到此列表所表示的堆栈中
  • public boolean isEmpty();如果不包含任何元素则返回true
    |
    特点
    1.底层是链表结构,增删快,查找慢
    2.含有大量首尾节点的方法
    3.云讯包含所有元素,包括null
    4.实现不是同步的,如果多个线程一起访问同一个链表,而其中至少一个线程结构上修改链表,那么至少保持外部同步。
    |||||||||||||||||||
    |||||||||||||||||||
    |||||||||||||||||||
    Set接口:HashSet和LinkedSet
    1.继承自Collection接口,与Collection接口中方法基本一摸一样哦,只是比Collectiong接口更加严格,
    2与List接口不同的是Set接口元素是无序的,并且不会重复
    3.Set接口没有带索引得方法,不能使用普通佛如循环进行遍历
    |
    HashSet集合:java.util包
    1.不允许重复性元素
    2.没有带索引得方法,不能使用普通佛如循环进行遍历
    3.无序无序哈
    4.底层是一个哈希表结构:java.util.Map来实现的
    |
    优点
    根据对象的哈希值来确定集合当中的存储位置,一此它具有良好的存取和查找性能。【并且保证元素唯一性,依赖于hashCode和equals方法。】所以,即使内存地址不一样,但是内容一样,也是不能存进去得。
    |
    哈希地址值
    1.十进制整数,jvm虚拟机给出,模拟地址(逻辑地址),不是数据真实存在的物理地址,逻辑地址只是为了让我们更容易调用。哈希值是由Object中的hashCode()方法,得到对象的哈希码值。
    |
    哈希表
    HashSet集合,存储数据结构:哈希表
    JDK1.8之前:哈希表=数组+链表
    JDK1.8之后:哈希表=数组+链表
    ---------- 哈希表=数组+红黑树
    如果链表结构超过了八位,那么就会把链表结构转换为红黑树结构。
    |
    存储元素到集合中步骤
    1.计算元素的哈希值(不同的元素哈希值也可能一样)
    2.把元素哈希值传入hashSet集合底层数组,元素哈希值形成链表节点随机挂在数组下面,哈希值相同的呢就就挂在相同哈希值的下面,一直往下挂,不同的呢,就换一个数组框来挂在下面。直到链表节点超过八个那就会回使用红黑树的方式进行元素存储(提高查询性能)。
    |
    往集合中加元素过程
    1.调用元素的hashCode方法和equals方法来判断元素是否重复。
    2.调用元素hashCode方法得到哈希值
    3.在集合中找有没有和该元素哈希值一样的哈希值,没有就把此元素存到集合中,如果有(哈希冲突)。那么次元素就会调用equals方法和哪个哈希值相同的元素进行比较,如果相同那么两个元素相同,就不存,不相同就存进去。
    |
    不重复
    1.保证唯一性重写Object类的hashCode和equals方法。
    |
    HashSet集合存储自定义元素
    通常需要重写HashCode和equals方法,自定义内部代码,根据自己的想法判断两个是不是相同。
    |
    LinkedHashSet集合:
    HashSet元素唯一但是,无序
    使用LinkedHashSet就能实现唯一且有序,(是HashSet的子类),他是链表和哈希表(数组+链表/红黑树)的一种组合出来的。Hashset只有哈希表,多出来的链表就是为了保证有序的。
    |
    可变参数列表
    出现时间:JDK1.5之后,我们定义一个方法需要接受多个参数,并且多个参数的数据类型一直,格式简化如下:
    修饰符 返回值类型 方法名(参数类型... 形参名){}
    同样是代表数组,但是在方法调用的时候,这个可变参数可以直接传数据。不用创建数组。本质就是封装到数组进行操作
    |
    使用条件:
    1.参数数据类型一致并确定,但是参数个数不确定,就使用可变参数,传0个都可以。
    2.可变参数得底层是定义了一个数组,根据传递参数个数不同创建不同长度的【数组】。来存储这些参数。
    注意
    1.一个方法参数列表只能有一个可变参数
    2.如果有不要一样的,那么就要把可变参数写在末尾
    public void method(String a,int[] b,double... c){}
    |
    Collections集合工具类:直接操作集合中的元素
    1.public static boolean addAll(Collection c,T... elements );往集合中一此加入多个元素 2.public static void shuffle(list list);打乱集合中元素顺序
    3.public static void sort(List list);对集合进行排序
    4.public static void sort(List list,Comperator<? super T>);自己控制升序还是降序的排序
原文地址:https://www.cnblogs.com/tushao/p/14082476.html