Java集合复习笔记

先来看看集合体系框架图:

                             

1、Collection (集合的最大接口)继承关系

  ——List 可以存放重复的内容,有序

  ——Set  不能存放重复的内容,所以的重复内容靠hashCode()和equals()两个方法区分,无序

  ——Queue  队列接口,

  ——SortedSet  可以对集合中的数据进行排序

Collection定义了集合框架的共性功能。
1,添加
add(e); 将e添加到集合中
addAll(collection a);将集合a全部添加到集合中

2,删除
remove(e);
removeAll(collection a); 从集合中去除集合a中的对象
clear(); 清空集合

3,判断。
contains(e);  集合是否有e元素,有则返回ture
isEmpty(); 判断是否为空

4,获取
iterator(); 获取迭代器
size();  获取集合有多少元素

5,获取交集。
retainAll();  返回两个集合的交集

6,集合变数组。
toArray();   将集合转变成数组结构

*add方法的参数类型是Object。以便于接收任意类型对象。

*集合中存储的都是对象的引用(地址)

2、List的常用子类

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


add(index,element);
addAll(index,Collection);


remove(index);


set(index,element);

get(index):
subList(from,to);  返回from-to 之间的对象,但包头不包尾
listIterator();

===========================================

补充:

Iterator和ListIterator主要区别有:

一、ListIterator有add()方法,可以向List中添加对象,而Iterator不能。

二、ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历。但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

三、ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator 没有此功能。

四、都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iterator仅能遍历,不能修改。因为ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作。

=============================================================

int indexOf(obj):获取指定元素的位置。
ListIterator listIterator();

================================

面试考点:

——ArrayList   线程不安全,查询速度快

——Vector  线程安全,但速度慢,已被ArrayList替代

——LinkedList  链表结果,增删速度快

4、Set接口

Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
|——HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
  HashSet是如何保证元素唯一性的呢?
  是通过元素的两个方法,hashCode和equals来完成。
  如果元素的HashCode值相同,才会判断equals是否为true。
  如果元素的hashcode值不同,不会调用equals。

  注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。

——TreeSet:

有序的存放:TreeSet  线程不安全,可以对Set集合中的元素进行排序

通过compareTo或者compare方法来保证元素的唯一性,元素以二叉树的形式存放。

5、Object类

*在实际开发中经常会碰到区分同一对象的问题,一个完整的类最好覆写Object类的hashCode()、equals()、toString()三个方法。

6、集合的输出

——4种常见的输出方式

  ——Iterator: 迭代输出,使用最多的输出方式

  ——ListIterator: Iterator的子接口,专门用于输出List中的内容

  ——Enumeration

  ——foreach  增强for循环

在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。

所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。

该接口只能通过List集合的listIterator方法获取。

7、Map接口

*Collection、Set、List接口都属于单值的操作,而Map中的每个元素都使用key——>value的形式存储在集合中。

Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
1,添加。
put(K key, V value) 
putAll(Map<? extends K,? extends V> m)

2,删除。
clear() 
remove(Object key)

3,判断。
containsValue(Object value) 
containsKey(Object key) 
isEmpty()

4,获取。
get(Object key) 
size() 
values()

entrySet() :

//返回映射所包含的映射关系的Set集合(一个关系就是一个键-值对),

//就是把(key-value)作为一个整体一对一对地存放到Set集合当中的.

keySet()  返回所有key对象形成的set集合,返回值是个只存放key值的Set集合(集合中无序存放的)

=======================================

补充:

分析:虽然使用keyset及entryset来进行遍历能取得相同的结果,

但两者的遍历速度是有差别的。
keySet():迭代后只能通过get()取key;再根据key值取value。
entrySet():迭代后可以e.getKey(),e.getValue()取key和value。


说明:keySet()的速度比entrySet()慢了很多,也就是keySet方式遍历Map的性能不如entrySet性能好
为了提高性能,以后多考虑用entrySet()方式来进行遍历。

=====================================================

8、Map接口的常用子类

Map
|HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

9、集合工具类

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

Collections和Collection有什么区别?
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
它有两个常用的子接口,
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。

Collections是集合框架中的一个工具类。该类中的方法都是静态的
提供的方法中有可以对list集合进行排序,二分查找等方法。
通常常用的集合都是线程不安全的。因为要提高效率。
如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。

 

猜你喜欢

转载自blog.csdn.net/qq_40434646/article/details/81585993
今日推荐