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 staticboolean addAll(Collection c,T... elements );往集合中一此加入多个元素 2.public static void shuffle(list list);打乱集合中元素顺序
3.public staticvoid sort(List list);对集合进行排序
4.public staticvoid sort(List list,Comperator<? super T>);自己控制升序还是降序的排序