一、概述
在Java语言中,Java语言的设计者对常用的数据结构和算法做了下规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据库结构(算法)统称为Java集合框架。Java程序员在具体应用时,不必考虑数据结构和算法实现的细节,只需要用这些类创建出来的一些对象就可以直接应用。
二、集合框架层次结构
Collection是所有集合的根接口,根据不同的环境和需求,Collection又细分为Set、List、Queue等子接口,在Java.util包中提供了所有使用的集合类。如图所示:
Collection接口方法,如图:
三、List接口
List是有序的Collection,使用此接口能够精确的控制每一个元素的插入位置,及使用索引访问List中的元素,List存储元素是有序的、可重复。除了具备Collection接口必备的Iterator()方法外,List还提供了listIterator()方法返回一个ListIterator接口,和标准的Iterator方法相比,多了add()之类的方法,允许添加、删除元素,还可以向前向后遍历。 实现List接口常用类:ArrayList、Arraylist、Vector、Stack。
List接口扩展的方法:
1、ArrayList类
特点:1)元素可以重复;
2)非同步的集合类;
3)实现了ICollection和List接口;
4)容量可以动态增加和减少,大小可变,初始容联为10;
5)插入、删除效率低下,查询效率高。
实例代码如下:
public static void myArrayList() {
//实例化ArrayList,指定操作泛型为String数据类型
LisT list=new ArrayList();
list.add("周星驰");
list.add("刘德华");
list.add("刘德华");
list.add("周润发");
list.add(0, "周杰伦");// 根据索引位置来添加元素
System.out.println("根据索引取出元素:" + list.get(1));
System.out.println("查询元素个数:" + list.size());
//1、使用迭代器将ArrayList中的元素取出
Iterator iter = list.iterator();
while (iter.hasNext()) {
// 使用String接收返回值
String str = iter.next();
// 打印
System.out.println(str);
}
//2、使用迭代器将ArrayList中的元素取出
ListIterator listIter = list.listIterator();
while (listIter.hasNext()) {
System.out.println("正向迭代元素:"+listIter.next()+"\t"
+"正索引:"+listIter.nextIndex());
}
while (listIter.hasPrevious()) {
System.out.println("反向迭代元素:"+listIter.previous()+"\t"
"反索引:"+listIter.previousIndex());
}
//3、使用for循环将ArrayList中元素取出
for(String str1 : list){
System.out.println("for循环取出:"+str1)
}
}
2、LinkList类
特点:1)插入、删除元素比较快,查询效率低;
2)元素可以为null;
3)双向链表、堆栈、队列;
4)非同步的集合类。
LinkList扩展的方法:
实例代码如下:
public static void myLinkedList(){
LinkedList list = new LinkedList();
list.add("1");
list.add("2");
list.add("3");
// 将元素插入到列表开头
list.addFirst("jok");
// 将元素插入到列表结尾
list.addLast("4");
// 删除第一个元素
list.removeFirst();
// 删除最后一个元素
list.removeLast();
System.out.println("获取第一个元素:" + list.getFirst());
System.out.println("获取最后一个元素:" + list.getLast());
//使用ListIterator迭代器打印
ListIterator listiter=list.listIterator();
while(listiter.hasNext()){
System.out.println(listiter.next());
}
}
三、Map接口
Java为数据结构的映射定义了一个接口java.util.map,它有四个实现类,分别是HashMap、Hashtable、LinkedHashMap、TreeMap。
特点:主要存储键值对,根据键(key)获取值(value),键(key)不允许重复,但值(value)可重复。
方法概要:
1、HashMap
特点:底层是哈希数据表结构,可以使用Null作为键或者值,效率比较高,该集合线程不是同步的。
代码实例:
// 创建HashMap集合类,其操作泛型为Sring数据类型
HashMap map = new HashMap();
map.put("01", "关羽");
map.put("02", "关羽");
map.put("03", "关羽");
/**
* Map集合获取元素的两种方式,(原理:将map集合转换成set,再使用迭代器)
* 1、keySet:将map中所有的键存入到set(set具备迭代器)集合,在根据get方法,
* 获取每一个健对应的值 。
* 2、entrySet
*/
// 1、通过KeySet()方法获取map集合中所有键Set集合
Set set = map.keySet();
Iterator iter = set.iterator();
while (iter.hasNext()) {
// 获取键key
String key = iter.next();
// 通过键key获取值(value)
String value = map.get(key);
System.out.println("key:" + key + " " + "value:" + value);
}
// 2、使用for()循环获取key-value
for (String key : set) {
System.out.println("键:" + key + " " + "值:" + map.get(key));
}
// 3、使用entrySet()方法,循环获取key-value
Set> entrySet = map.entrySet();
Iterator> iter1 = entrySet.iterator();
// 简写: Iterator> iter1=map.entrySet().iterator();
while (iter1.hasNext()) {
Entry en = iter1.next();
String key = en.getKey();
String value = en.getValue();
System.out.println("键1:" + key + " " + "值1:" + value);
}
// 获取Map值(value)视图
Collection coll = map.values();
Iterator iter2 = map.values().iterator();
while (iter2.hasNext()) {
System.out.println("遍历获取value值:" + iter2.next());
}