List Set Map

1.List本身属于一个接口,要想取得接口的实例化对象,那么应该通过子类实例化接口,它有两个常用子类:

ArrayList【数组实现,查询快,增删慢,线程不安全,轻量级】、 Vector【数组实现,线程安全,重量级 】。

  1.1 List接口中,get()方法非常重要

List<String>all=new ArrayList<String>();
all.add("hello");//List是有序列表,允许存放重复的元素
all.add("hello");
all.add("world";)
for(int x=0;x<all.size();x++){
    String str=all.get(x);
    Sysout.out.println(str);
}

  1.2 List接口中提供有contains()、remove()的操作方法,这两个方法都需要实现equals()方法。

public class TestList {
    public static void main(String[] args) {
        List<Dept>list=new ArrayList<Dept>();
        list.add(new Dept(10,"财务部","Beijing"));
        list.add(new Dept(20,"技术部","Shenzhen"));
        list.add(new Dept(30,"财务部","HongKong"));
        list.remove(new Dept(30,"财务部","HongKong"));
        for(int x=0;x<list.size();x++){
            Dept d=list.get(x);
            System.out.println(d);
        }
    }
}
class Dept{
    private int dno;
    private String dep;
    private String loc;
    public Dept(int dno,String dep,String loc){
        this.dno=dno;
        this.dep=dep;
        this.loc=loc;
    }
    @Override
    //如果没有覆写equals操作,将删除(第8行)不了。
    public boolean equals(Object obj) {
        // TODO Auto-generated method stub
        if(this==obj)return true;
        if(obj==null)return false;
        if(!(obj instanceof Dept))return false;
        Dept dept=(Dept)obj;
        return this.dno==dept.dno&&this.dep.equals(dept.dep)&&this.loc.equals(dept.loc);
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "编号"+this.dno+" 部门:"+this.dep+"  地点:"+this.loc;
    }
}

  1.3  一个面试题:ArrayList与Vector的区别。

   1.4 LinkedList是一个真正的链表实现类,其功能比ArrayList更加丰富,但大部分使用不到。(附一张重要的图)。

  2. Set是Collection的一个接口,里面的数据不允许出现重复,允许使用null。它有两个重要的子类,HashSet(无序)、TreeSet(有序)。一般使用HashSet。

只要在java中牵扯到一组对象的比较操作永远都使用Comparable接口来完成。

public class TestTreeSet {
    public static void main(String[] args) {
        Set<Person>set=new TreeSet<Person>();
        set.add(new Person("wa",20));
        set.add(new Person("xi",10));
        set.add(new Person("li",10));
        System.out.println(set);
    }
}
class Person implements Comparable<Person>{
    private int age;
    private String name;
    public Person(String name,int age){
        this.age=age;
        this.name=name;    
    }
    @Override
    /*
     * 当年龄相同时,后面的对象会覆盖掉前面的。所以compareTo()方法不能像之前那样写
     * return this.age-o.age;
     */
    public int compareTo(Person o){
        if(this.age>o.age)return 1;
        if(this.age<o.age)return -1;
        else
            return this.name.compareTo(o.name);
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "名字:"+this.name+" 年龄:"+this.age;
    }
}

  2.2 关于重复元素的说明

对于使用Comparable消除重复元素,只适合于TreeXxx类型的集合。大部分类型的集合,消除重复元素是利用Object类中的两个方法来完成。

取得hash码: public int hashCode()

对象比较:public boolean equals(Object obj)

(PS:知道即可,开发中很少使用。)

 3. Map

  3.1 几个常见方法:

public V put(K key,V value)

public V get(Object key)

public Set<K> keySet() //返回Map中所有的key,key不能重复

public Set<Map.Entry<K,V>> entrySet() //将map转换为Set集合

  3.2 在Map接口中有两个重要的子类,HashMap、HashTable。

Map几乎不需要进行排序,因为Map集合的目的不是输出,而是查询。如果在Map集合中使用了重复的key保存,将使用新的内容替换旧的的内容。

在HashTable集合之中key或者是value都不允许保存null,会出现NullpointException。

在HashMap中允许key或者value为null。

在Map接口下还存在一个TreeMap子类,这个子类保存的数据可以实现key的排序操作。它的value可以保存null,key不能保存null,因为排序依靠key。

  3.3 Map.Entry

是一个内部类 public static interface Map.Entry<K,V>,要想用Iterator输出Map集合的数据,首先要解决的问题就是Map.Entry接口的定义。

Map接口基于Iterator输出的步骤:

1)利用Map接口中的entrySet()方法将Map集合变为Set集合;

2)Set集合中定义有iterator()方法,可以为Iterator接口实例化;

3)利用Iterator接口的迭代输出,找出每一个Map.Entry接口对象,并且利用getKey()、getValue()输出数据。

Set<Map.Entry<Integer,String>>set=map.entrySet();
Iterator<Map.Entry<Integer,String>>iter=set.iterator();
while(iter.hasNext()){
    Map.Entry<Integer,String>me=iter.next;
    System.out.println(me.getKey()+" "+me.getValue());
}
原文地址:https://www.cnblogs.com/alatar16/p/7614904.html