6.集合类

集合体系

Collection:

|--List:元素是有序的,元素可以重复。因为该集合体系有索引。

 |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。

|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。

  |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。

|--Set:无序,不可以重复元素。

  |--HashSet:数据结构是哈希表。线程是非同步的。

保证元素唯一性的原理:判断元素的hashCode值是否相同。

如果相同,还会继续判断元素的equals方法,是否为true。

  |--TreeSet:可以对Set集合中的元素进行排序。

底层数据结构是二叉树。

保证元素唯一性的依据:

compareTo方法return 0。

TreeSet排序的第一种方式:让元素自身具备比较性。

元素需要实现Comparable接口,覆盖compareTo方法。

也种方式也成为元素的自然顺序,或者叫做默认顺序。

TreeSet的第二种排序方式:

当元素自身不具备比较性时,或者具备的比较性不是所需要的。

这时就需要让集合自身具备比较性。

在集合初始化时,就有了比较方式。

Collection定义了集合框架的共性功能

添加:add(e)、addAll(collection);

删除:remove(e)、removeAll(collection)、clear();

判断:contains(e)、isEmpty();

获取:iterator()、size();

获取交集:retainAll();

集合变数组:toArray();

List特有方法,凡是可以操作角标的方法都是该体系特有的方法

增加:add(index,element)、addAll(index,Collection);

删除:remove(index);

设置:set(index,element);

查询:get(index)、subList(from,to)、istIterator()、int indexOf(obj)、ListIterator listIterator();

Set集合的功能与Collection是一致的。

Iterator接口

所有实现了Collection接口的容器都有一个iterator方法用以返回一个实现了Iterator接口的对象;

Iterator对象称为迭代器,方便的实现了容器内的元素遍历操作;

Iterator接口主要方法如下:

booleanhasNext()          如果仍有元素可以迭代,则返回 true。

 Enext()          返回迭代的下一个元素。

 voidremove()          从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

Iterator常用代码体现:

Collection c = new ArrayList();

for(iterator I = c.iterator();i.hashNext();)

{

String s = i.next();

}


泛型:JDK1.5版本以后出现新特性,用于解决安全问题,是一个类型安全机制。

好处:

将运行时期出现问题ClassCastException,转移到了编译时期,方便于程序员解决问题,让运行时问题减少,安全,并且避免了强制转换麻烦。

泛型格式:通过<>来定义要操作的引用数据类型。

泛型一般在集合框架类中使用。

泛型的限定:

?extends E: 可以接收E类型或者E的子类型。上限。

?super E: 可以接收E类型或者E的父类型。下限。


Map集合:该集合存储键值对,一对一对往里存,而且要保证键的唯一性。

添加put(K key, V value) 、putAll(Map m)

删除clear()、 remove(Object key)

判断containsValue(Object value) 、containsKey(Object key) 、isEmpty()

获取get(Object key) 、size() 、values() 、entrySet() 、keySet()

Map

|--Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的。jdk1.0.效率低。

|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。

|--TreeMap:底层是二叉树数据结构。线程不同步,可以用于给map集合中的键进行排序。

Set底层就是使用了Map集合。

遍历map集合的两种方式

Set keySet:将map中所有的键存入到Set集合,因为set具备迭代器,

所有可以迭代方式取出所有的键,在根据get方法,获取每一个键对应的值。

Map集合的取出原理:将map集合转成set集合,在通过迭代器取出。

Set keySet = map.keySet();

Iterator i = keySet.iterator();

while(i.hasNext())

{

String key = i.next();

System.out.println(key);

String value = map.get(key);

System.out.println(value);

}

Set> entrySet:将map集合中的映射关系存入到了set集合中,

而这个关系的数据类型就是Map.Entry,Entry其实就是Map中的一个static内部接口。

Set> entrySet = map.entrySet();

Iterator> i = entrySet.iterator();

while(i.hasNext())

{

Map.Entry me = i.next();

    String value = me.getValue();

    System.out.println(value);

}

集合框架的工具类

Collections:集合框架的工具类,里面定义的都是静态方法。

Collections和Collection有的区别:

Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。

Collections是集合框架中的一个工具类,该类中的方法都是静态的,提供的方法中有可以对list集合进行排序,二分查找等方法。

高级for循环

格式:

for(数据类型 变量名 : 被遍历的集合(Collection)或者数组)

{

}

对集合进行遍历,只能获取集合元素。但是不能对集合进行操作,迭代器除了遍历,还可以进行remove集合中元素的动作。

如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作。

传统for和高级for的区别:

高级for有一个局限性,必须有被遍历的目标。

建议在遍历数组的时候,还是希望是用传统for,因为传统for可以定义脚标。

你可能感兴趣的:(6.集合类)