首页 > 其他 > 详细

Collection的另外一个子类LinkedList&Set集合

时间:2019-04-08 20:48:12      阅读:146      评论:0      收藏:0      [点我收藏+]

计算机的内存中,有的是连续的内存空间,比如数组,就是连续的内存空间。除了这些连续的内存空间以外,剩下的内存空间都是以链表的形式存在。

链表又分为单向链表和双向链表:

单向链表:一个单向链表分为一个数据域和一个指针域,指针域里存放的是下一个单向链表的地址

双向链表:一个双向链表分为一个数据域,两个指针域,第一个指针存放的是前一个双向链表的地址,第二个指针域存放的是下一个双向链表的地址

Collection集合的两个子类:ArrayList和LinkedList:

ArrayList的底层是数组,LinkedList的底层是一个链表

那么来区分呢一下数组和集合在进行数据的CURD(增删改查)的时候的优缺点

数组由于是连续的内存空间,有序列号(下标),所以数组在进行数据的查询时速度快于集合,但是正是由于数组的连续空间组织,使得数组再进行数据的增删时慢于集合,集合只需要将链表断开,重连即可

而数组要一位一位的换位置,所以数组的增删要慢于集合。

这也正是底层的结构决定了上层的应用。

队列:就和队伍一样,先进先出。

栈:先进后出,虚拟机里的栈是底端封口的。

 

 ArrayList<String>  list=new ArrayList<>();  泛型:前边的尖括号里写了泛型的类型,后边的尖括号里就可以不用写了,会自动推断出泛型的类型的(在java1.7版本以后出现的)

 

关于上一篇的抽象类和接口的向上转型问题,我的想法得到了肯定。

Syso("\t")

Scanner sc =new Scanner(System.in);

只要将sc这个对象创建出来,在作用域里,就可以进行多次的调用。

 

Iterator it =list.iterator();

it.hasNext();  哈希Next方法,判断这个对象的哈希地址是否为空。

在编译器进行编译的时候,会将整个包都进行编译, 所以这个包下只要有同名的类,就会报错。

 

泛型的四种常用类型  E:element   T : type   K:key   V:value

不能有静态泛型类,因为虚拟机一运行,就将静态的东西加载到内存中,而泛型是非静态的,泛型要等到创建对象之后才能加载到内存中,所以静态类加载时泛型不具体,不能有静态泛型类。

 

泛型的好处:只需要写一个方法,任何类型的数据都可以使用,必方法的重载还要方法,代码的重用率高。

 

泛型的通配符  ?

java.lang包下的所有东西,使用的时候都不需要导包。

 

静态导入:将java.lang包用static修饰,然后导入  以后在使用System.out.println()  时,写为out.println() 即可。

可变参数: fun();

  public void fun(int... a) fun(){

}  想给fun方法传递几个参数都可以,当参数列表有很多参数时,可变参数必须放在最后一个,这样才好区分哪些为别的参数,那些为可变参数

 

Set:Collection集合的另一个子类:

Set和List的区别:

List是有序,可重复的

Set是无序,不可重复的

对于Set的不可重复:相同类型的对象,无论你存储多少个,Set集合只保留一个(自定义对象:针对重写hashCode方法和equals方法,若不重写

hashCode方法和equals方法,Set只能通过地址来判断是否相同,做不到不重复)

加载因子:某集合的容量为16,若它的加载因子为1,则只有当16个元素都存储满了,才会扩容,当加载因子为0.75时,集合容量为100,存储75个

对象,就会扩容

 

哈希冲突:哈希值计算出的索引位置重复,导致该索引位置已经存储了元素,但是还有元素需要存储在这个索引位置,这叫哈希冲突,也叫哈希碰撞

 

hasCode方法重写的原理:看元素的哈希值是否相同

hashCode方法未重写前:根据地址返回一个哈希值

 

Set的存储原理:

首先调用元素对象的hashCode方法,来判断该位置有无元素,若无元素,则直接插入

若有元素,则调用元素对象的equals方法,判断元素对象的值是否相同,若相同,则不插入,若不相同,则链式插入,当达到八个元素时,

使用红黑树进行插入。

 

LinkedList代码演示

 1 public class LinkedList 类 {
 2 public static void main(String[] args) {
 3 // 创建对象
 4 LinkedList<String> list=new LinkedList<>();
 5 // 添加方法
 6 list.add("1");
 7 list.add("2");
 8 list.add("3");
 9 list.add(1, "4");
10 System.out.println(list);
11 }
12 }

 

Collection的另外一个子类LinkedList&Set集合

原文:https://www.cnblogs.com/ywzbky/p/10672874.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!