一、常见集合
首先看一下他们之间的关系
Collection 接口的接口 对象的集合
├ List 子接口 按进入先后有序保存 可重复
│├ LinkedList 接口实现类 链表 插入删除 没有同步 线程不安全
│├ ArrayList 接口实现类 数组 随机访问 没有同步 线程不安全
│└ Vector 接口实现类 数组 同步 线程安全
│ └ Stack
└ Set 子接口 仅接收一次,并做内部排序
├ HashSet
│ └ LinkedHashSet
└ TreeSet
Map 接口 键值对的集合
├ Hashtable 接口实现类 同步 线程安全
├ HashMap 接口实现类 没有同步 线程不安全
│├ LinkedHashMap
│└ WeakHashMap
├ TreeMap
└ IdentifyHashMap
更为精炼的总结:
Collection 是对象集合, Collection 有两个子接口 List 和 Set
List 可以通过下标 (1,2..) 来取得值,值可以重复
而 Set 只能通过游标来取值,并且值是不能重复的
ArrayList , Vector , LinkedList 是 List 的实现类
ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的
LinkedList 是线程不安全的,底层是由链表实现的
Map 是键值对集合
HashTable 和 HashMap 是 Map 的实现类
HashTable 是线程安全的,不能存储 null 值
HashMap 不是线程安全的,可以存储 null 值
1.ArrayList
- ArrayList类中常用方法:
- ArrayList简单使用:
public class ArrayListDemo01 {
public static void main(String[] args) {
List<String> allList=null;
Collection<String> allCollection=null;
allList=new ArrayList<String>();
allCollection=new ArrayList<String>();
allList.add("Hello");
allList.add(0,"World");
System.out.println(allList);
allCollection.add("I");
allCollection.add("am");
allCollection.add("Groot");
allList.addAll(allCollection);
System.out.println(allList);
String str[]=allList.toArray(new String[] {});
System.out.print("指定数组类型:");
for(int i=0;i<str.length;i++) {
System.out.print(str[i]+"、");
}
System.out.print("\n返回对象数组:");
Object obj[]=allList.toArray();
for(int i=0;i<obj.length;i++) {
String temp=(String)obj[i];
System.out.print(temp+"、");
}
System.out.println();
System.out.println(allList.contains("Groot")?"\"Groot\"字符串存在":"\"Groot\"不存在");
List<String> sub=allList.subList(0, 1); //左闭右开
System.out.print("集合截取:");
for(int i=0;i<sub.size();i++) {
System.out.print(allList.get(i)+"、");
}
System.out.println("");
System.out.println("Groot的位置:"+allList.indexOf("Groot"));
}
}
运行结果:
- LinkedList的简单使用
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedList<String> link=new LinkedList<String>();
link.add("a");
link.add("b");
link.add("c");
System.out.println("初始化链表:"+link);
link.addFirst("x");
link.addLast("Y");
System.out.println("增加头和尾之后的链表:"+link);
System.out.println(link.size());
for(int i=0;i<link.size();i++){
System.out.println("循环次数:"+i);
System.out.println("链表大小: "+link.size());
System.out.println(link.poll()+"、"); //poll()检索并删除此列表的头(第一个元素)。
}
}
}
运行结果:
2.Set
- Set类常用方法
- Set类简单使用
import java.util.SortedSet;
import java.util.TreeSet;
public class TreeSetDemo01 {
public static void main(String[] args) {
SortedSet<String> allSet=new TreeSet<String>();
allSet.add("A");
allSet.add("B");
allSet.add("C");
allSet.add("C"); //Set不重
allSet.add("D");
allSet.add("E");
allSet.add("F");
System.out.println(allSet);
System.out.println("第一个元素:"+allSet.first());
System.out.println("最后一个元素:"+allSet.last());
System.out.println("headSet元素:"+allSet.headSet("C"));
System.out.println("tailSet元素:"+allSet.tailSet("C")); //左闭右开
System.out.println("subSet元素:"+allSet.subSet("B", "D")); //左闭右开
}
}
运行结果:
3.Map
- Map类常用方法:
- Map类简单使用:
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapDemo01 {
public static void main(String[] args) {
Map<String,String> map=null;
map=new HashMap<String,String>();
map.put("key", "value");
map.put("father", "digen");
map.put("mother", "jimei");
String val=map.get("father");
System.out.println("father对应的内容:"+val);
Set<String> keys=map.keySet();
Iterator<String> iter=keys.iterator();
System.out.print("全部的key:");
while(iter.hasNext()){
String str=iter.next();
System.out.print(str+"、");
}
System.out.println();
Collection<String> values=map.values();
System.out.println(values.contains("digen")?"包括digen":"不包括digen");
Iterator<String> iter2=values.iterator();
System.out.print("\n全部的value: ");
while(iter2.hasNext()) {
String str=iter2.next();
System.out.print(str+"、");
}
}
}
运行结果
二.项目实战
见下篇