list集合类随笔

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HNUST_LIZEMING/article/details/88081203

一开始是将  类加载到方法区中  然后如果下列遇到新的方法  也可以加载到
方法区中   对象一般创建在堆中  运行方法时候一定要入栈。每一个对象都有
初始化值。


集合的由来:
 *数组的长度是固定的 当添加的元素超过数组的总长度时需要对数组重新定义
,太麻烦,Java内部给我们提供了集合类,能存储任何对象,长度是可以改变的
随元素的增加而增加。随元素的减少而减少。

数组和集合的区别
区别一:
数组既可以存储基本数据类型 也可以存储引用数据类型,基本数据类型存储的是
值,引用数据类型存储的是地址。
集合只能存储引用数据类型(对象) 集合中也可以存储基本数据类型  但是在存储
的时候会自动装箱变成对象。


数组和集合什么时候用  
 1.如果个数是固定的 推荐使用数组
 2.如果个数不是固定的话就建议使用集合

集合底层实现:也是用数组实现的 有一个初始值大小的数组 当数组存满的时候
就会创建一个a*1.5倍的数组  将原来的数放入进去 原本的数组就会被舍弃  这是
从原理的角度想的  会造成一定的浪费。  如果已知的话就是用数组。

一。collection(单列集合的根接口)
二。List有序(存和取的顺序是一致)有索引 可以存储重复值
三。ArrayList数组实现
       LinkList 链表实现
       Vector 数组实现    

二。set无序(存和取的顺序是不一致) 无索引 不可以存储重复值
三。Hashset  哈希算法
       Treeset   二叉树算法

父类引用指向子类对象  编译时看父类方法  运行时候看的是子类方法

因为list可以添加重复的值 所以add的返回类型一直是true  因为这个collection
的抽象接口  而且set是collection是其子类(并且保证不可以是值重复的)。

sontains bool

Object [] arr = c.toArray();将集合转换为数组的方法。

扫描二维码关注公众号,回复: 5477861 查看本文章

在add中会将对象自动提升为object对象  (父类引用指向子类对象)
所以在使用arr[i].方法时候要强制转换  相当于降级。

迭代器 
集合是用来存储元素  存储元素需要查看 那么就需要迭代
iterator it =c.iterator()
原理:迭代器是对集合进行遍历 而每一个集合内部存储结构都是不同的
所以每一个集合存和取都是不一样的 那么就需要在每一个类中定义一个
hasnext next方法(),这样做是可以的 但是会让整个代码显得臃肿 
迭代器是将这样的方法向上抽·取出接口 然后在每一个类的内部,定义
迭代方式。好处:1.集合体系遍历方式就是hasnext next方法()2.代码
有底层实现 使用者不用管 会用就好。

关于list
 因为list是一个接口 所以不能new  只有父类引用指向子类对象
当使用不存在的索引时候就会抛出索引越界异常
index可以小于等于size并且大于等于0  都不会报异常

list删除时候不会自动装箱  所以remove时候要注意了
通过索引遍历集合
  ()list.get(i);

在遍历的时候就修改的话 就会报错 爆出并发修改
修改的方法就是 使用listiterator中特有的add方法
告诉迭代器 在遍历的过程中发生了修改。


有工具类可以将 不安全的集合变为安全的集合

猜你喜欢

转载自blog.csdn.net/HNUST_LIZEMING/article/details/88081203