list接口继承了collection,因此包含connection的所有方法
list常用的实现类有Array List和LinkedList
ArrayList类实现了可变的数组,允许保存所有元素,包括null,并可以根据索引位置对集合进行快速的随机访问,但是,它的缺点是向指定的索引位置插入对象或删除对象的速度较慢。
LinkedList类采用链表结构保存对象,这种结构的优点是便于向集合中插入和删除对象,需要向集合中插入,删除对象时,使用LinkedList类实现的list集合效率较高,但是对于随机访问List的对象,使用Linked List类实现的list集合效率较低。
List<E>list=new List<>(); //实例化list集合
import java.util.*;
public class Gather
{
public static void main(String[] args)
{
List<String>list=new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
int i=(int)(Math.random()*(list.size()-1));
System.out.print(list.get(i)+" ");
list.remove(2);
for(int j=0;j<list.size();j++)
{
System.out.print(list.get(j));
}
}
}
set继承connection,因此也包含connection接口的所有方法,set的构造方法中有一个约束条件,传入的connection的对象不能有重复值。
set接口常用的实现类有Hashset和Treeset
Hashset类实现set接口,由哈希表实现(实际上是一个Hashmap实例)支持,它不保证set的迭代顺序,特别是它不保证该顺序不变,允许使用null。
Treeset类不仅实现set接口,还实现java,util,sortedset接口,因此,Tree set类实现的set集合在遍历集合时按照自然顺序递增排序,也可以按照比较器递增排序,即可以通过比较器对用Tree set类实现的set集合中的对象进行排序。
import java.util.*;
public class Update implements Comparable<Object>
{
String name;
long id;
public Update (String name,long id)
{
this.name=name;
this.id=id;
}
public int compareTo(Object o)
{
Update upstu=(Update)o;
int result=id>upstu.id?1:(id==upstu.id?0:-1); //让集合的排列有一个顺序
return result;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id =id;
}
public static void main(String[] args)
{
Update stu1=new Update("student li",01);
Update stu2=new Update("student chen",02);
Update stu3=new Update("student wang",03);
Update stu4=new Update("student ma",04);
TreeSet<Update>tree=new TreeSet<Update>();
tree.add(stu1);
tree.add(stu2);
tree.add(stu3);
tree.add(stu4);
Iterator<Update>it=tree.iterator();
System.out.println("set 集合的所有元素");
while(it.hasNext())
{
Update stu=it.next();
System.out.println(stu.getId()+" "+stu.getName());
}
it=tree.headSet(stu2).iterator();
System.out.println("截取前面的集合");
while(it.hasNext())
{
Update stu=it.next();
System.out.println(stu.getId()+" "+stu.getName());
}
it=tree.subSet(stu2,stu3).iterator();
System.out.println("截取中间部分的集合");
while(it.hasNext())
{
Update stu=it.next();
System.out.println(stu.getId()+" "+stu.getName());
}
it=tree.tailSet(stu3).iterator();
System.out.println("截取后面的部分");
while(it.hasNext())
{
Update stu=it.next();
System.out. println(stu.getId()+" "+stu.getName());
}
}
}
存入treeset类实现的set集合必须实现compareable接口,该接口中的compareTo(objiect o)方法比较此对象与指定对象与对象的顺序。如果该对象小于,等于或大于指定对象,则分别返回负整数,0或正整数。
headSet(),subSet(),tailSet():如果指定参数位于起始位置,则包含该对象。如果位于终止位置,则不包含该参数。
map集合没有继承connection接口,其提供的是key和value的映射,map中不能包含相同的key,每个key只能映射一个value。key还决定存储对象在映射中的存储位置,但不是由key本身决定的,而是通过一种散列技术进行处理,产生一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的起止位置。
map接口常用的实现类有HashMap和TreeMap,Hash Map类实现的map集合添加或删除映射关系时效率更高。HashMap是基于哈希表的map接口的实现,HashMap通过哈希码对其内部的映射关系进行快速访问,而TreeMap中的映射关系存在一定的顺序,如果希望map集合中的对象也存在一定的顺序,应该使用Treemap类实现map集合
如果Hashmap类创建map集合,当需要顺序输出时,再创建一个完成相同映射关系的Treemap类实例
import java.util.*;
public class MyMap
{
public static void main(String[] args)
{
Map<String,String>map=new HashMap<>();
Emp emp1=new Emp("a","李思思");
Emp emp2=new Emp("h","王毅");
Emp emp3=new Emp("c","李四");
map.put(emp1.getE_Id(),emp1.getE_Name());
map.put(emp2.getE_Id(),emp2.getE_Name());
map.put(emp3.getE_Id(),emp3.getE_Name());
Set<String>set=map.keySet(); //获取map集合中的key对象集合
Iterator<String>it=set.iterator();
System.out.println("hashmap类实现的map集合");
while(it.hasNext())
{
String str=(String)it.next();
String name=(String)map.get(str);
System.out.println(str+" "+name);
}
TreeMap<String,String>treemap=new TreeMap<String,String>();
treemap.putAll(map);
Iterator<String>iter=treemap.keySet().iterator();
System.out.println("tree类实现的map集合,键对象升序");
while(iter.hasNext())
{
String str=(String)iter.next();
String name=(String)treemap.get(str);
System.out.println(str+" "+name);
}
}
}