一、用得最多的主要有Set,List,Map,Iterator这几个接口, Set和List接口都是Collection接口的子接口,有很多相同的地方,我们只是撑握了Collection接口的方法,Set和List的用法也就差不多了.
Set和List 的区别:1、Set是没有顺序的,不能放重复的数据(相同的数据)
2、List是有顺序的,可以存放重复的数据(相同的数据)
Set的实现类常用的主要有两个:HashSet、TreeSet
我们可以把一类对象添加到集合中,并且按对象的某一个属性进行排序(客户化排序和自然排序)
1、对TreeSet集进行客户化排序要求写一个类实现Comparator接口,并且重写其中的Compare方法 例:
客户化排序容易扩展,如果要按其它的属性排序,只需要重新写一个类实现Comparator接口就可以了,
不需要修改原来的代码。
class Users
{
private String name;
private int id;
public Users(String name,int id)
{
this.name=name;
this.id=id;
}
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public void setId(int id)
{
this.id=id;
}
public int getId()
{
return id;
}
//这里重写了父类的toString方法
public String toString()
{
return this.name + "\t" + this.id + "\t";
}
}
//这个类实现Comparator接口,并且重写了其中的compare方法
public class MyComparator implements Comparator
{
public int compare(Object o1,Object o2)
{
Users user1=(Users)o1;
Users user2=(Users)o2;
if(user1.getId>user2.getId) return 1;
else if(user1.getId==user2.getId) return 0;
return -1;
}
}
class TestComparator
{
public static void main(String args[])
{
TestComparator.test();
}
public static void test()
{
Set set=new TreeSet(new MyComparator());
Users user1=new Users("张三",17);
Users user2=new Users("李四",13);
Users user3=new Users("王五",19);
Users user5=new Users("王五",19);
set.add(user1);
set.add(user2);
set.add(user3);
set.add(user5);
for(Object obj :set)
{
System.out.println(obj);
}
}
}
2、自然排序,将需要排序的那个类实现Comparable接口并且重写其中的compareTo方法
例如下: class Users implements Comparable
{
private String name;
private int id;
public Users(String name,int id)
{
this.name=name;
this.id=id;
}
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public void setId(int id)
{
this.id=id;
}
public int getId()
{
return id;
}
//这里重写了父类的toString方法
public String toString()
{
return this.name + "\t" + this.id + "\t";
}
//重写compareTo方法
public int compareTo(Object o)
{
UserBean user = (UserBean) o;
if (this.id > user.id) return 1;
else if (this.id == user.id) return 0;
return -1;
}
}
3.如果是HashSet自然排序,则要求排序的类重写hashCode方法和equals方法
二、对List和Set集进行遍历:
List集有三种方法进行遍历:
1、通过下标遍历,2使用迭代器进行遍历,3、增强循环进行遍历
List list=new ArrayList();
list.add("aa");
list.add("bb");
list.add("cc");
for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i));
}
Iterator it=list.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
for(Object obj :list)
{
System.out.println(obj);
}
三、Vector和ArrayList的区别:
1、Vector 和ArrayList都实现了List接口,Vector是线程安全的,可以多个线程同时访问,但性能比较差
2、ArrayList线程不安全,不支持多个线程同时访问,但性能比较好,访问的速度快
四、Map集是以键值对的形式存放的,键不可以重复,值可以重复,如果键重复,会将原来的值覆盖,
Map集的实现类主要有三个:HashMap,TreeMap,HashTable
HashMap与HashTable 的区别: 1、HashTable是线程安全的,支持同步。2、HashMap线程不安全,不支持
同步,但性能比HashTable好
Map集的遍历:
1、
Map map=new HashMap()
map.put("1","张飞");
map.put("2","关羽");
map.put("3","刘备");
//得到键的集合
Set set=map.keySet();
for(Object obj :set)
{
System.out.println(map.get(obj));
}
2、
//得到健值对的集合
Set s=map.entrySet();
for(Object obj :set) {
System.out.println(obj);
}
五、对List集进行客户化排序,可以通过Collections类的sort方法,要求传一个List集和一个Comparator对象 例:
List list=new ArrayList()
Users user1=new Users("张三",17); Users user2=new Users("李四",13);
Users user3=new Users("王五",19);
Users user5=new Users("王五",19);
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user5);
Collections.sort(list,new Mycomparator());
Iterator it=list.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}