List Set Map

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了List Set Map相关的知识,希望对你有一定的参考价值。

【注:以下内容大部分摘自李兴华老师的Java笔记】

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:知道即可,开发中很少使用。)

 


以上是关于List Set Map的主要内容,如果未能解决你的问题,请参考以下文章

多用多学之Java中的Set,List,Map

ArrayList,LinkedList,Vector,Set,Map,List,HashMap,HashTable

代码片段 - Golang 实现集合操作

Kotlin集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )

Kotlin集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )

集合总结(Collection,List,Set,Map)(补充集合结构图的关系)