1008-2019学习记录(P511-P539)-Java集合

集合
Collection单列数据

Map 双列数据
数组有一些弊端
都是对多个数据进行存储操作的结构,就是Java容器
此时的存储都是内存层面的存储。不涉及到持久化的存储(.txt)
数组的特点:

  1. 一旦初始化以后长度确定了,并且需要指定类型String[ ] arr Object[ ] arr
    2.数组中提供的方法非常有限,对于添加、删除、插入等操作都非常不便,同时效率不高
  2. 获取数组中实际元素的个数等等没有现成的方法和属性。
  3. 有序性,可重复。只能操作单个元素。

实际开发都是集合。

Collection单列数据
List和Set:
List:元素有序、 可重复的数据常用来替换数组,做动态数组
ArrayList、LinkedList、Vector
add(Object e);addAll(…) ;clear();retainAll();equals();等等
注意集合到数组的转换:
集合到数组:toArray();
数组到集合:Arrayas.asList();

另外需要注意Iterator遍历Collection:
为容器而生,用于遍历。
有内部方法:hasnext();next();(指针下移)
一般用while(.hasnext())这样来遍历
迭代器的对象可以是多个。
还有一个remove();方法就是删除元素
有点类似于加头结点的链表
JDK5.0 用foreach来遍历
for(Object obj : coll ){ }

面试题:
ArrayList、LinkedList、Vector的异同
同:就都是存储有序的可重复的数据。
ArrayList:作为主要的实现类,线程不安全,效率高,底层使用Object[ ] 存储。
LinkedList:就是底层结构的区别用双向链表,对于插入删除效率比较高。
Vector:jdk1.0 线程安全,效率不高,底层使用Object[ ] 存储
ArrayList源码分析:
jdk7的版本分析:
就是长度为10的Object数组,如果调用空参的构造器,ArrayList arr = new ArrayList();
超出会默认扩容为原来的1.5倍。
建议在实际开发的过程中使用带参的构造器
jdk8:
ArrayList arr = new ArrayList();并没有创建长度为10的数组
当我们第一次调用add时底层才会创建长度为10的数组
之后的操作和jdk7之后的操作是一样的
内存节省
jdk7相当于单例模式的饿汉式
jdk8相当于单例模式的懒汉式,延迟了数组的创建,节省了内存。
LinkedList 源码分析:pre,next这种
vector的底层源码分析:
扩容为2倍和线程安全的,别的和ArrayList很相似

List的常用方法:

add,add(int index,Object obj)
addAll
get(int index);
indexOf返回obj首次出现的位置
remove(int index)
set(1,“cc”);
subList(int beginindex,int endindex);
还是就是增删改查

如何理解Set的无序性和不可重复性?

无序性指的是地址的无序性,对象存储不连续,并非按照数组索引的顺序添加。
不可重复性:保证添加的元素按照equals()判断时,不能返回true
添加元素时,计算hashcode值,如果没值的话,直接添加,
在hashcode相同的值那里的有值的话
在判断equals返回true的话就是重复。
数据结构是先是底层数组然后是链表(当哈希值相等时)。
向Set添加数据时,数据所属的类必须重写哈希值和equals方法,再保证一致性
就是相同的对象计算出的hashcode值是相等的
LinkedHashSet:底层以链表存
TreeSet:底层以相同的类型的数据存,有

Set:无序 , 不可重复的数据
HashSet、LinkedHashSet、TreeSet

Map:key-map
HashMap、LinkedHashMap、TreeMap、HashTable、Properties

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值