集合

有些人可能不知道我们为什么要用到集合,不是要数组吗?

在写程序的时候,数组有时候虽然可以替代集合,但数组相对于集合有一个很大的缺点。数组在存储数据的时候有一个很大的缺点,那就是必须定义数组的长度,而集合的长度是可变的。在java编程中,经常需要在内存中保存大量的,各种类型的数据,使用数组很不便捷,我们就需要用集合来完成我们的目的。

集合的特点:

1.用于存储对象的容器;

2.集合长度是可变的;

3.集合中不可以存储基本数据类型的值。

集合框架的顶层是collection接口,它常见方法有:

1,添加。
boolean add(Object obj):
boolean addAll(Collection coll):


2,删除。
boolean remove(object obj):
boolean removeAll(Collection coll);
void clear();

3,判断:
boolean contains(object obj):
boolean containsAll(Colllection coll);
boolean isEmpty():判断集合中是否有元素。

4,获取:
int size():
Iterator iterator():取出元素的方式:迭代器。

该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。
所以该迭代器对象是在容器中进行内部实现的。
对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可, 也就是iterator方法。

可能有人不知道什么是Iterator,其实Iterator就是一个接口,Iterator接口就是对所有的Collection容器进行元素取出的公共接口。

collection下的list,set,和map:

list:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。

List:特有的常见方法:有一个共性特点就是都可以操作角标。

1,添加
void add(index,element);
void add(index,collection);
2,删除;
Object remove(index):
3,修改:
Object set(index,element);
4,获取:
Object get(index);
int indexOf(object);
int lastIndexOf(object);
List subList(from,to);
list集合是可以完成对元素的增删改查。

List下的子集:
1.Vector:内部是数组数据结构,是同步的。增删,查询都很慢!
2.ArrayList:内部是数组数据结构,是不同步的。替代了Vector。查询的速度快。
3.LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。

set:元素不能重复,无序.

Set接口中的方法和Collection一致。

set下的子集:

1.HashSet: 内部数据结构是哈希表 ,是不同步的。

是通过对象的hashCode和equals方法来完成对象唯一性的。
如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。
如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。
记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。

2.TreeSet:可以对Set集合中的元素进行排序。是不同步的。

判断元素唯一性的方式:就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。

if(this.hashCode()== obj.hashCode() && this.equals(obj))

哈希表确定元素是否相同
1,判断的是两个元素的哈希值是否相同,如果相同,在判断两个对象的内容是否相同。
2,判断哈希值相同,其实判断的是对象的hashCode的方法。判断内容相同,用的是equals方法

注意:如果哈希值不同,是不需要判断equals。

map:Map接口映射唯一关键字到值。关键字(key)是以后用于检索值的对象。给定一个Map对象中。当这个值被存储以后,就可以使用它的关键字来检索它。

map下的三大子集:

1.HashMap

HashMap类使用散列表实现Map 接口。

2.TreeMap

TreeMap 类通过使用树实现 Map 接口。TreeMap 提供了按排序顺序存储“关键字/ 值”对的有效手段,同时允许快速检索。应该注意的是,不像散列映射,树映射保证它的元素按照关键字升序排序。 

3.AbstractMap

AbstractMap对三个具体的映射实现来说,是一个超类。

 

 

原文地址:https://www.cnblogs.com/mydouya/p/7309162.html