一、集合概述
出现意义:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
*****************************************
集合与数组辨析
1,容器长度:
集合长度可变 数组长度固定
2,存储内容类型:
集合存储引用数据类型 数组存储任意类型
3,是否可存储不同类型数据
集合可以存储不同类型数据 数组只能存储相同数据类型
***********************************************
Java中的集合: JDK为我们提供了一套完整的容器类库,这些容器可以用于存储各种类型的对象,并且长度都是可变的,我们把这些类统称为集合类,它们都位于java.util包中。
分类:
单列集合Collection
List:元素有序、包含重复元素
Set:元素无序、不包含重复元素
双列集合Map:键值映射关系
其他功能接口
迭代器Iterator
Comparable与Comparator用于比较元素
二、集合-------Collection接口
Collection接口:单列集合的根接口
主要方法
boolean add(E e)
boolean remove(Object o)
void clear()
boolean contains(Object o)
boolean isEmpty()
int size()
主要方法2
boolean addAll(Collection c)
boolean removeAll(Collection c)
boolean containsAll(Collection c)
boolean retainAll(Collection c)
返回迭代器方法
Iterator<E> iterator()
三、List集合
List:元素是有序的,元素可以重复
ArrayList al=new ArrayList();
增 加 : al.add();
在指定位置添加 al.(index,"");
删除指定位置元素 al.remove(index);
修改元素 a1.set(index,"")
通过 角标获取元素 al.get(index);
获取所有元素:
- for(int x=0;x<al.size();x++)
- {
- al.get(x)
- }
第二种方式:
- Iterator it=a1.iterator();
- while(it.hasNext())
- {
- it.next();
- }
通过indexof获取对象的位置:
al.indexof("字符串");
获取列表中两个位置之间的数:返回List
List sub=al.subList(1,3)返回角标1和3之间的数
在迭代集合过程中,不能对集合进行其他操作,如添加删除等,这时就需要迭代器可以对迭代器的对象进行操作,但是由于Iterator迭代器只有 remove功能,所以建议使用其子接口ListIterator,它具备删除 remove 添加 add 修改 set 等功能,但此功能是List特有
ListIterator列表迭代器:是List集合特有的迭代器,是Iterator的子接口。可以对集合列表进行各种操作。
- ListIterator it=a1.ListIterator();
- while(it.hasNext())//正向遍历
- {
- it.next();
- it.set();//修改
- }
逆向遍历
it.hasPrevious
LinkedList:底层使用的是链表结构。特点:增删速度快,但是查询稍慢 不同步
ArrayList :底层使用是的数组结构。特点:查询速度很快,但是增删稍慢。 同步的
Vecctor:底层使用是的数组结构。是同步的
Vector 使用:
Vector v=new Vector();
v.add();
v.add();
- Enumeration en=new Enumeration ()
- while(en.hasMoreElements())
- {
- en.nextElement();
- }
LinkedList()集合;
特有方法:
addFirst();往前添加
addlast(0;往后添加
getFirst();//获取头值,永远是第一个值
getLast();//获取尾值
removeFirst();//删除并返回头元素 出现NuSuchElementException异常
removeLast();//删除并返回尾元素
1.6中出现了替代方法:
添加
offerFirst()
offerlast()
获取
peekFirst()
peekLast()
删除
pollfirst()
polllast()
LinkedList llist=new LinkedList();
四、Map集合
Map集合概念:对应于Collection的单列集合,Map为双列集合,存储的每个元素均为键值对,对键进行约束。可以通过键找到该建对应的值。
Map集合无法返回对应的迭代器。其内容需要调用方法进行访问。
主要格式:
Map<k,v>
key - 此映射所维护的键的类型
value - 映射值的类型
主要子类:
HashMap:底层为哈希表结构的Map集合。
Hashtable:底层为哈希表结构的Map集合。
TreeMap:对键进行排序,排序原理与TreeSet相同的Map集合。
LinkedHashMap:可预知顺序的HashMap集合
HashMap :底层为哈希表的双列集合。对键进行无序唯一约束,放入相同键时,新的值会将旧的值覆盖。是最常用的Map集合。
特点
线程不安全
速度快
允许存放null键,null值
主要方法
public V put(K key, V value)
public void putAll(Map<? extends K,? extends V> m)
public boolean isEmpty()
public int size()
public boolean containsKey(Object key)
public boolean containsValue(Object value)
public V remove(Object key)
public void clear()
public V get(Object key)
public Set<K> keySet()
public Collection<V> values()
public Set<Map.Entry<K,V>> entrySet()
把map集合转成set的方法:
Set<k> keySet(); 将map中所有的键存到Set集合。Set<k,value> entrySet();//取的是键和值的映射关系。
Entry就是Map接口中的内部接口;
为什么要定义在map内部呢?entry是访问键值关系的入口,是map的入口,访问的是map中的键值对。
---------------------------------------------------------
取出map集合中所有元素的方式一:keySet()方法。
可以将map集合中的键都取出存放到set集合中。对set集合进行迭代。迭代完成,再通过get方法对获取到的键进行值的获取。
- Set keySet = map.keySet();
- Iterator it = keySet.iterator();
- while(it.hasNext())
- {
- Object key = it.next();
- Object value = map.get(key);
- System.out.println(key+":"+value);
- }
--------------------------------------------------------
取出map集合中所有元素的方式二:entrySet()方法。
- Set keySet = map.keySet();
- Iterator it = keySet.iterator();
- while(it.hasNext())
- {
- Object key = it.next();
- Object value = map.get(key);
- System.out.println(key+":"+value);
- }
五、集合体系总结:
集合:
|--Collection
|--List
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
|--Set
|--HashSet
底层数据结构是哈希表。
如何保证唯一性?
依赖hashCode()和equals()
顺序:
先判断hashCode()值是否相同:
是:继续走equals(),看返回值
true:元素重复。不添加
false:元素不重复。添加
否:直接添加
|--LinkedHashSet
底层数据结构是链表和哈希表。
由链表保证有序(存储和取出一致)。
由哈希表保证元素唯一。
|--TreeSet
底层数据结构是二叉树。
如果保证唯一性?
根据返回值是否是0。
如何排序:
自然排序:Comparable
比较器排序:Comparator
|--Map
|--HashMap
|--LinkedHashMap
|--Hashtable
|--TreeMap