java泛型集合list_JAVA 泛型与常见的数据结构和集合

泛型与常见的数据结构和集合

集合&迭代器

集合体系结构图

b15f3c652a46da568b5eca31f9d78760.png

由于不同的数据结构(数据的组织,存储方式),所以java为我们提供了不同的集合

不同的集合他们的功能都是相似的,不断向上提取,将共性抽取出来

Collection中的常用功能

booleanadd(Object e): 向集合中添加元素voidclear():清空集合中所有元素booleancontains(Object o):判断集合中是否包含某个元素booleanisEmpty():判断集合中的元素是否为空booleanremove(Object o):根据元素的内容来删除某个元素intsize():获取集合的长度

Object[] toArray():能够将集合转换成数组并把集合中的元素存储到数组中

collections

Collection和Collections有什么区别?

Collection是集合体系的最顶层,包含了集合体系的共性

Collections是一个工具类,方法都是用于操作Collection

static void swap(List list, int i, intj) :将指定列表中的两个索引进行位置互换static void sort(Listlist) :按照列表中元素的自然顺序进行排序static voidshuffle(List list):随机置换static voidreverse(List list) :反转static voidfill(List list, Object obj) :使用指定的对象填充指定列表的所有元素static voidcopy(List dest, List src) :是把源列表中的数据覆盖到目标列表,注意:目标列表的长度至少等于源列表的长度static int binarySearch(List list, Object key) 使用二分查找法查找指定元素在指定列表的索引位置

List接口(有序,可空值,可重复)

特有功能:

void add(intindex, E element) :将元素添加到index索引位置上

E get(intindex) :根据index索引获取元素

E remove(intindex) :根据index索引删除元素

E set(int index, E element):将index索引位置的的元素设置为element

LinkedList特有功能

LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢

voidaddFirst(E e) :向链表的头部添加元素

voidaddLast(E e):向链表的尾部添加元素

E getFirst():获取链头的元素,不删除元素

E getLast():获取链尾的元素,不删除元素

E removeFirst():返回链头的元素并删除链头的元素

E removeLast():返回链尾的元素并删除链尾的元素

List的常用子类:

*      ArrayList

*          底层是数组结构,查询快,增删慢

*      LinkedList

*          底层结构是链表,查询慢,增删快

Set接口(无序,可空值,不允许重复,没有索引)

Set集合的特点: 无序,可空值,不允许重复,没有索引

因为Set是一个接口所以不能直接实例化对象

Set set = new HashSet();

该接口主要继承于Collections接口,所以具有Collection的一些常见的方法。

Set的常用子类:

HashSet:底层数据结构是哈希表

新添加到HashSet集合的元素都会与集合中已有的元素一一比较

首先比较哈希值(每个元素都会调用hashCode()产生一个哈希值)

如果新添加的元素与集合中已有的元素的哈希值都不同,新添加的元素存入集合

如果新添加的元素与集合中已有的某个元素哈希值相同,此时还需要调用equals(Object obj)比较

如果equals(Object obj)方法返回true,说明新添加的元素与集合中已有的某个元素的属性值相同,那么新添加的元素不存入集合

如果equals(Object obj)方法返回false, 说明新添加的元素与集合中已有的元素的属性值都不同, 那么新添加的元素存入集合

TreeSet:底层数据结构是红黑树

Collection总结

156d5e5bc03431e43e6c64f924389aa5.png

如果你知道是Set,但是不知道是哪个Set,就用HashSet。

查询多:ArrayList

增删多:LinkedList

如果你知道是List,但是不知道是哪个List,就用ArrayList。

如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。

如果你知道用集合,就用ArrayList。

迭代器

集合的遍历方式:

1.toArray(),可以把集合转换成数组,然后遍历数组即可

2.iterator(),可以返回一个迭代器对象,我们可以通过迭代器对象来迭代集合

private static voidmethod2() {

Collection c= newArrayList();

c.add("hello");

c.add("world");

Iterator it=c.iterator();while(it.hasNext()){

System.out.println(it.next());

}

Object next(): 返回下一个元素 boolean hasNext():判断是否有元素可以获取

注意:迭代器是依赖于集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合不一样,则抛出异常

foreach & 泛型

由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常,

* 所以java为了解决这个问题,给我们提供了一种机制,叫做泛型

*

* 泛型:是一种广泛的类型,把明确数据类型的工作提前到了编译时期,借鉴了数组的特点

* 泛型好处:

*          避免了类型转换的问题

*          可以减少黄色警告线

*          可以简化我们代码的书写

foreach:增强for循环,一般用于遍历集合或者数组

* 格式:

*      for(元素的类型 变量 : 集合或者数组对象) {

*          可以直接使用变量;

*      }

注意:在增强for循环中不能修改集合,否则会出现并发修改异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值