Java中的集合框架
上图是集合框架中常用的类和接口: 一、用得最多的主要有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()); } |
转载于:https://blog.51cto.com/tangyajun/60596