java list map 查询_Java集合List、Set以及Map详解

一、集合

1.1、概念:是对象的容器,实现了对于对象常用的操作,可实现数组的功能

1.2、集合与数组的区别

数组长度固定,集合长度不固定

数组可以存储基本类型和引用类型,而集合只能存储引用类型

1.3、概述

List、Set、Map都是接口,其中List和Set继承Collection接口,Map为独立接口

List的实现类有ArrayList(重要)、LinkedList(重要)、Vector

Set的实现类有HashSet、TreeSet(实现了Set的子接口SortedSet)

Map的实现类有HashMap、TreeMap(实现了Map的子接口SortedMap)

Collection接口下还有Queue接口,其实现类包含LinkedList、PoriorityQueue

b2fd34854e0e02895d49e554699815d6.png         

18ed1eabdaa4cf52966485e1f9ac3f8a.png

注:LinkedList既实现了List接口,也实现了Queue接口。不过Queue接口窄化了LinkedList的方法,即只能使用Queue接口中定义的方法,不可以使用其他方法

二、Collection集合

1、List接口

1.1、特点:有序、有下标、元素可以重复

1.2、常用操作方法:add(E e)、remove(int index)、get(int index)、iterator()

1.3、实现类特点:

数据结构

查询速度

增删速度

运行效率

线程安全

ArrayList

数组

Vector

数组

LinkedList

双向链表

1.4、ArrayList与LinkedList区别:

ArrayList是数组结构,需要开辟连续空间,查询比较快,增删比较慢;

LinkedList是双向链表结构,所以无需开辟连续空间,查询比较慢,增删比较快

2、Set集合

2.1、特点:无序、无下标、元素不可以重复,

2.2、常用操作方法:add(E e)、remove(Object o)、iterator()

2.3、实现类特点:

数据结构

是否排序

元素可否为null

元素可否重复

线程安全

插入速度

HashSet

哈希表

TreeSet

红黑树

3.4、HashSet存储方式:

HashSet的存储结构是哈希表,当存入元素时,首先基于HashCode计算元素存放位置,如果此位置为空,则直接保存,如果不为空则会调用equals进行确认,如果结构为true,则认为重复,否则,形成链表。

3.5、TreeSet的排序方法:

1、对于系统定义的引用类型(如Integer、Double、String等)

public classDemo0 {public static voidmain(String[] args) {//创建集合

TreeSet treeset = new TreeSet<>();//添加元素

treeset.add(4);

treeset.add(5);

treeset.add(51);

treeset.add(15);

treeset.add(26);for(Integer i:treeset)

System.out.println(i);

}

}

387fdc07e8ac367eb0ac36ede9e4c27a.png

可以看见,遍历的结果是有序的。

2、**对于储存的元素为自己定义的类

public classDemo04 {public static voidmain(String[] args) {//创建集合

TreeSet treeset = new TreeSet<>();//生成对象

Person p1 = new Person("Bce",10);

Person p2= new Person("Ace",12);

Person p3= new Person("Fce",8);

Person p4= new Person("Cce",6);//添加元素

treeset.add(p1);

treeset.add(p2);

treeset.add(p3);

treeset.add(p4);

System.out.println(treeset.toString());

}

}

1613de0227eb20b14222fdf77a7c23d1.png

我们发现此时系统会抛出异常,大致意思是我们的Person类不可以进行比较,因为排序需要元素之间能比较大小才能进行,我们有两种解决方法:

(1)元素对象实现Comparable接口,重写其compareTo方法

public class Person implements Comparable{publicString name;public intage;publicPerson(){};public Person(String name, intage){this.name =name;this.age =age;

}//这里重写Comparable

public intcompareTo(Person p){//这里我们简单的进行名字的比较

int n1 = this.name.compareTo(p.name);returnn1;

}

@OverridepublicString toString(){return this.name+":"+(Integer)this.age;

}

}

bfce39c5b06501f2d6be8103eb5054d8.png

可以看到运行结果按照我们定义的比较方法进行排序

(2)为TreeSet指定比较器进行排序

public classDemo04 {public static voidmain(String[] args) {//创建集合

TreeSet treeset = new TreeSet<>(new Comparator(){

@Overridepublic intcompare(Person o1, Person o2) {int n =o1.name.compareTo(o2.name);returnn;

}

});//生成对象

Person p1 = new Person("Bce",10);

Person p2= new Person("Ace",12);

Person p3= new Person("Fce",8);

Person p4= new Person("Cce",6);//添加元素

treeset.add(p1);

treeset.add(p2);

treeset.add(p3);

treeset.add(p4);

System.out.println("运行结果:");for(Person p:treeset)

System.out.println(p.toString());

}

}

bfce39c5b06501f2d6be8103eb5054d8.png

三、Map集合

1、特点:

用于存储任意键值对(key-value)

键:无序、无小标、不允许重复(唯一)

值:无序、无下标、允许重复

2、常用方法:put(K key, V value)、get(Object key)、keySet()、remove(K key)、entrySet()等

3、实现类的特点:

数据结构

是否排序

运行效率

Key可否为null

线程安全

HashMap

哈希表+红黑树

TreeMap

红黑树

是(对key排序)

HashTable

哈希表

4、关于Map的遍历

packagecom.collection;importjava.util.HashMap;importjava.util.Map;importjava.util.Set;public classDemo06 {public static voidmain(String[] args) {//创建集合

HashMap person = new HashMap<>();//1.添加元素

Person p1 = new Person("xxx",1);

Person p2= new Person("yyy",2);

Person p3= new Person("zzz",3);

person.put(p1,"北京");

person.put(p2,"上海");

person.put(p3,"杭州");//System.out.println(person);//2.遍历//2.1keySet方法

Set pkey =person.keySet();for(Person p:pkey)

System.out.println(person.get(p));

System.out.println("分割线--------------------");//2.2entrySet方法

Set> entry =person.entrySet();for(Map.Entrymmp:entry){

System.out.println(mmp.getKey()+"+"+mmp.getValue());

}

}

}

e9a64c9791daeab6748f2adc222a6c20.png

欢迎关注微信公众号,不定期分享学习笔记与资料,与Mike一起学java,谢谢~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值