List集合、Set集合

1.List接口

  • 有序集合,存储和读取元素的顺序相同;
  • 允许存储重复的元素
  • 有索引,可以通过普通for循环遍历;
  • 常用方法:
  1. get(index)
  2. add(index, element)
  3. remove(index)
  4. set(index, element)
  • list集合的遍历有三种方式:
  1. 普通for循环
  2. 迭代器
  3. 增强for循环
  • 有Vector集合、ArraList集合、LinkedList集合实现了List接口。

1.1ArrayList

  • List的数组实现,底层是一个大小可变的数组
  • 特点是查询快、增删慢,日常开发中使用最多的是查询、遍历数据
  • 许多程序员开发中随意的使用ArrayList完成任何需求,并不严谨,是不提倡的;
  • 不是同步的;

1.2LinkedList

  • List的链表实现,底层是一个链表结构;
  • 特点是查询慢、增删快;
  • 包含大量操作首尾元素的方法,使用LinkedList集合特有的方法不能使用多态;
  • 常用方法:
  1. addFirst(E e):将指定元素插入到集合的开头
  2. addLast(E e):将指定元素插入到集合的末尾,等效于add()
  3. push(E e):将元素推入此集合所表示的堆栈,等效于addFirst()
  4. pop(E e):从此集合表示的堆栈弹出一个元素并返回,等效于removeFirst()
  5. getFirst():返回此集合的第一个元素
  6. getLast():返回此集合的最后一个元素
  7. removeFirst():移除并返回此集合的第一个元素
  8. removeLast():移除并返回此集合的最后一个元素
  9. isEmpty():不包含元素则返回true

1.3Vector

  • 1.2版本后出现了其他单列集合,1.1版本出现的单列集合就是Vector;
  • 底层是一个可变数组
  • 同步的,单线程,速度慢

2.Set接口

  • 无序;
  • 不允许存储重复元素;

  • 没有索引,不能通过普通for循环遍历;
  • 有HashSet和TreeSet集合实现了Set接口,LinkedHashSet又继承了HashSet。

2.1HashSet

  • HashSet存储数据的结构是哈希表,是一个十进制的整数,由系统随机给出,就是对象的逻辑地址值,模拟出来的地址,不是数据实际存储的物理地址,Object类的方法hashCode()可以获取对象的哈希值,native int hashCode(),native表明该方法调用的是本地操作系统的方法,String类重写了hashCode();
  • 哈希表的实现方式是一个数组+链表/红黑树
  • Set集合不允许存储重复元素的原因:set集合在调用add方法时,会调用元素的hashCode方法和equals方法,判断元素是否重复(前提是存储的元素必须重写hashCode方法和equals方法,保证元素不重复);

  • HashSet集合存储自定义类型的元素,必须要保证存储的元素必须重写hashCode方法和equals方法。

2.2LinkedHashSet

  • LinkedHashSet是HashSet的子类,方法一样,是Set的哈希表(数组+链表/红黑树)和链表的实现,多了一条链表,与HashSet的区别在于维护着一个运行于所有条目的双重链表,定义了迭代的顺序,按照元素插入的顺序进行迭代,多的那一条链表用于记录元素的存储顺序,保证元素有序
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值