欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中集合接口Collection,集合List,Set

程序员文章站 2022-06-10 23:43:58
...

集合的特点:

1.集合的长度是可变的

2.集合只能存储对象

3.集合不可以存储基本数据类型

数组与集合的区别:

1.数组的长度是固定的,集合的长度是可变的

2.数组只能存储基本数据类型,集合只能存储对象

注意:Java中集合接口和实现类都位于java.unitl这个工具包下,包含 collection框架,遗留的collection类,事件模型,日期和时间,国际化和各种工具类

集合框架:集合容器中因为内部数据结构不同,有多种具体容器,不断向上抽取,形成了集合框架。

Java中集合接口Collection,集合List,Set

一.集合框架的顶层是collection接口

这个接口中定义集合的共性方法:

1.添加

boolean add(E  e) 将一个元素添加进去

boolean addAll(collection e)将指定的collection中的元素添加到此collection中 

2.删除

boolean remove(Object o)  删除单个元素

boolean removeAll(collection e)将此collection中也包含在指定collection中的所有元素删除

void clear()      将集合中的元素进行清空

3.判断

boolean contains(Object o)   判断对象是否在该集合中

boolean containsAll(conllection c) 判断集合参数是否存在于集合中

boolean isEmpty()     判断集合中是否存在元素

4.获取

int size()   获取集合中元素的个数

Iterator  iterator() 集合取出元素的方式,称为迭代器

5.其他

boolean retainAll(collection c)  仅仅保留此collection中那些也包含在collection参数中的元素(取交集)

Object []  toArray()   将集合转换成数组
二.collection中最常用的俩个子接口
1.List<E>接口

特点:有序的集合(存入顺序和取出顺序一致) ,允许多个null值及重复元素,有元素索引 

常用方法(共性特点都可以操纵角标):

1.1.添加

void add(index,Element)         在列表插入指定元素

void add(index,collection)  

1.2.删除

Object remove(index)    删除指定位置的元素

1.3.修改

Object set(index,element)  更换指定位置的元素

1.4.获取   

Object get(index)    获取指定位置的元素

int indexOf(Element e) 返回指定元素的角标

int  lastindexOf(Element e) 返回该指定元素在集合中最后的索引,不包含时,返回-1

1.5.其他

ListIterator listiterator()                          通过迭代器取出List集合中的元素

ListIterator listiterator(int index)                 从指定位置(包含指定位置)往后取出List集合的元素

1.6实现List接口的类

1.6.1  vector

内部的数据结构是 数组,支持同步(线程安全),增删查都很慢

1.6.2 ArrayList

内部的数据结构是 数组   不支持同步(线程不安全),可以自己添加同步锁  查询很快

1.6.3 LinkedList

内部的数据结构是 链表  不支持同步(线程不安全),可以自己添加同步锁  增删很快

注意:该接口下的实现类的contains()方法是equals()一个方法,

2.Set<E>接口

无序的集合,最多支持一个null值,不允许重复元素,没有元素索引

set中的常用方法与collection中的一致,上面已经写过

2.1实现Set<E>接口的类

2.1.1 HashSet

内部数据结构是哈希表  ,不支持同步(线程不安全),基于HashMap实现

hashSet存储元素的原理:

1.首先通过hashCode()方法确定元素位置

2.再次通过equals()方法确定元素内容是否重复

所以,在使用的过程中,有必要的情况下,要重写hashCode()方法和equals()方法

注意:该接口下的实现类的contains()方法是hashCode()和equals()两个方法,remove()方法也是一样

LinkedHashSet,继承于HashSet,它与HashSet是不同的,相比于HashSet,它是有序的,因为LinkedHashSet的内部数据结构是一个双向链表,此链表定义了迭代顺序,即按照Set的插入顺序进行迭代,使用它可以生成一个Set副本,并且与原Set无关

2.2 TreeSet  基于TreeMap实现

内部结构是二叉树,不支持同步,支持对元素的自然排序或者根据创建Set时的提供comparator进行排序

TreeSet判断元素唯一性,是根据比较方法中的返回值:0==等于    1==大于    -1===小于

TreeSet集合对元素进行排序的方式

1.元素的自然排序,让元素自身具有比较功能,元素实现comparable接口,覆盖compareTo()方法,这种方式,是对元素的自       然排序,这是Java中一种默认排序方式

2.集合的自然排序,让集合自身具有比较功能,创建类实现comparator接口,覆盖compare()方法,然后将该对象传递给创建TreeSet的构造函数;该方式的使用场景:对象中不具备自然排序的方式,对象中的自然排序方式不适合的时候