博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Day15 集合(二)
阅读量:5843 次
发布时间:2019-06-18

本文共 9806 字,大约阅读时间需要 32 分钟。

Set简介

定义

public interface Set
extends Collection
{}

Set是一个继承于Collection的接口,即Set也是集合中的一种。Set是没有重复元素的集合。

SotedSet

接口,排序,自然升序排序的

public static void main(String[] args) {        // SortedSet        SortedSet
set = new TreeSet<>(); set.add("cc"); set.add("aa"); set.add("bb"); System.out.println(set);// [aa, bb, cc] System.out.println(set.first());//aa System.out.println(set.last());//cc System.out.println(set.subSet("aa", "cc"));//[aa, bb] }

HashSet

哈希表

调用hashCode()

​       equals()判断

顺序:先调用hashCode()算出值,如果hashCode()的值相同了,进一步调用equals()判断是否相同。相同不存储,不相同可以进行链式存储。

1 import java.util.HashSet; 2 import java.util.Set; 3 class Person{ 4     private int no; 5     private String name; 6     public Person(int no, String name) { 7         this.no = no; 8         this.name = name; 9     }10     public int getNo() {11         return no;12     }13     public void setNo(int no) {14         this.no = no;15     }16     public String getName() {17         return name;18     }19     public void setName(String name) {20         this.name = name;21     }22     @Override23     public String toString() {24         // TODO Auto-generated method stub25         return no+","+name;26     }27     @Override28     public int hashCode() {29         return name.hashCode()+no;30     }31     @Override32     public boolean equals(Object obj) {33         //this   34         //obj35         Person per = (Person)obj;36         return this.no == per.no && this.name.equals(per.name) ? true :false;37     }38     39 }40 public class TestSet1 {41     public static void main(String[] args) {42         Set
set = new HashSet<>(); 43 Person guo = new Person(11, "xiaoguo");44 Person huang = new Person(11,"xiaoguo");45 Person yang = new Person(22,"xiaoyang");46 set.add(guo);47 set.add(huang);48 set.add(yang);49 set.forEach(System.out::println);50 51 //Set 52 /* Set
set = new HashSet<>();53 set.add("aa");54 set.add("bb");55 set.add("cc");56 // set.forEach(System.out::println);57 set.add("aa");58 set.forEach(System.out::println);*/59 60 }61 62 }
View Code

TreeSet

import java.util.NavigableSet;import java.util.TreeSet;public class TestSet4 {    public static void main(String[] args) {        // NavigableSet        NavigableSet
set = new TreeSet<>((d1,d2)->(int)(d2-d1)); set.add(34.5); set.add(56.34); set.add(67.2); System.out.println(set); // 小于等于 指定参数 的最大 元素 System.out.println(set.floor(58.9)); //大于等于 指定参数 的 最小元素 System.out.println(set.ceiling(58.9)); //降序排列的集合 set.descendingSet().forEach(System.out::println); //返回 降序的迭代器 set.descendingIterator().forEachRemaining(System.out::println); //删除 第一元素 set.pollFirst(); System.out.println(set); set.pollLast(); System.out.println(set); }}

HashSet、LinkedHashSet和TreeSet的区别

HashSet:哈希表,数据唯一,重写hashCode()和equals()方法,效率最高

LinkedHashSet:链表和哈希表,元素有序,按照元素插入的顺序排序的

TreeSet:二叉树,默认是自然升序排序的,也可以自己制定顺序

Map接口

定义

public interface Map
{ }

Map 是一个键值对(key-value)映射接口。Map映射中不能包含重复的键;每个键最多只能映射到一个值

Map 接口提供三种collection 视图,允许以键集值集键-值映射关系集的形式查看某个映射的内容。
Map 映射顺序。有些实现类,可以明确保证其顺序,如 TreeMap;另一些映射实现则不保证顺序,如 HashMap 类。
Map 的实现类应该提供2个“标准的”构造方法:第一个,void(无参数)构造方法,用于创建空映射第二个,带有单个 Map 类型参数的构造方法,用于创建一个与其参数具有相同键-值映射关系的新映射。实际上,后一个构造方法允许用户复制任意映射,生成所需类的一个等价映射。尽管无法强制执行此建议(因为接口不能包含构造方法),但是 JDK 中所有通用的映射实现都遵从它。

1 import java.util.HashMap; 2 import java.util.Map; 3  4 public class TestMap1 { 5  6     public static void main(String[] args) { 7         // Map 8         Map
map = new HashMap<>(); 9 //键唯一10 map.put(1, "aa");11 map.put(2, "bb");12 map.put(3, "cc");13 System.out.println(map);14 //集合 中键值对个数15 System.out.println(map.size());16 //17 System.out.println(map.isEmpty());//false18 //判断键 是否存在19 System.out.println(map.containsKey(1));20 //判断值 是否存在21 System.out.println(map.containsValue("cc"));22 //按照键移除 键值对23 // map.remove(2);24 map.remove(1, "aa");25 System.out.println(map);26 //键的集合 Set类型27 System.out.println(map.keySet());28 //值得集合 Collection29 System.out.println(map.values());30 //31 // map.clear();32 // System.out.println(map.isEmpty());33 System.out.println(map);34 map.put(2, null);35 map.put(null, null);36 System.out.println(map);37 }38 39 }
View Code

遍历

import java.util.Hashtable;import java.util.Map;public class TestMap2 {    public static void main(String[] args) {        // Map  遍历        Map
map = new Hashtable<>();// Map
map = new HashMap<>(); //键唯一 map.put(1, "aa"); map.put(2, "bb"); map.put(3, "cc"); //1.单独遍历 map.keySet().forEach(System.out::println); map.values().forEach(System.out::println); //2 整体遍历 ,遍历键值 map.forEach((k,v)->System.out.println(k+","+v)); //3 //获得键值对集合 map.entrySet().forEach(System.out::println); //4.迭代器遍历 map.entrySet().iterator().forEachRemaining(System.out::println); map.entrySet().iterator().forEachRemaining(e->System.out.println(e.getKey()+","+e.getValue())); }}

说明

(01) Map提供接口分别用于返回 键集、值集或键-值映射关系集。
        entrySet()用于返回键-值集Set集合
        keySet()用于返回键集Set集合
       values()用户返回值集Collection集合
       因为Map中不能包含重复的键;每个键最多只能映射到一个值。所以,键-值集、键集都是Set,值集时Collection

(02) Map提供了“键-值对”、“根据键获取值”、“删除键”、“获取容量大小”等方法。

HashMap、Hashtable、LinkedHashMap和TreeMap的区别

HashMap:空键值对

Hashtable:线程安全的。少用

LinkedHashMap:按照插入的顺序

TreeMap:键 按照自然排序

效率:HashMap > LinkedHashMap > TreeMap

Queue接口

方法

队列:是一组操作受限的线性表,只能在对尾增加,在对头删除,先进先出。

双端队列

栈的方法

push、pop

public class TestDeque1 {    public static void main(String[] args) {        // Deque双端队列        //模拟队列        Deque
d = new ArrayDeque<>(); /* d.add("aa"); d.addLast("bb"); d.addLast("cc"); while(d.size() > 0) {// System.out.println(d.poll()); System.out.println(d.pollFirst()); }*/ //模拟栈/* d.addFirst("aa"); d.addFirst("bb"); d.addFirst("cc"); while(d.size() > 0 ) { System.out.println(d.pollFirst()); }*/ //使用栈的方法 d.push("aa"); d.push("bb"); d.push("cc"); while(d.size() > 0) { System.out.println(d.pop()); } }}

实现类

ArrayDeque、LinkedList(栈)

1 public class TestDeque2 { 2     public static void main(String[] args) { 3         // 银行排队 4         Person1 zhangsan = new Person1("张三"); 5         Person1 guojing = new Person1("郭靖"); 6         Person1 yangkang = new Person1("杨康"); 7         Person1 huangrong = new Person1("黄蓉"); 8         Person1 wangwu = new Person1("王五"); 9         Person1[] person = {zhangsan,guojing,yangkang,huangrong,wangwu};10         Deque
d = new ArrayDeque<>();11 //入队,分配号码12 for(int i = 0; i < 5; i++) {13 person[i].setNo(i+1);14 d.addLast(person[i]);15 }16 //出队17 while(d.size() > 0) {18 System.out.println("* "+d.pollFirst()+" 办理完成");19 if(d.size() > 0) {20 System.out.println("剩余:");21 d.forEach(System.out::println);22 }else {23 System.out.println("后边没有队伍了");24 }25 }26 System.out.println("全部办理完成");27 28 }29 30 }
View Code
1 public class TestQueue1 { 2  3     public static void main(String[] args) { 4         // Queue队列 5         Queue
q = new LinkedList<>(); 6 //向队尾添加 7 q.add("aa");//失败 抛异常 8 q.add("bb"); 9 q.offer("cc");//添加失败 false10 // q.offer(null);队列 不允许 添加 null值 ,LinkedList特殊 ,最好 不要用 Null11 System.out.println(q);12 //模拟队列 操作:出队13 /* System.out.println(q.poll());//14 System.out.println(q.poll());15 System.out.println(q.poll());*/16 //循环17 /* for(;;) {18 String s = q.poll();19 20 if(s == null) {21 break;22 }23 System.out.println(s);24 }*/25 while(q.size() > 0) {26 //移除 出队27 // System.out.println(q.poll());28 //只 获得不会移除29 // System.out.println(q.peek());30 }31 32 }
View Code

Collections类的一些常用方法

sort、sort(集合,比较器)、binarySearch、reverse、max、min、frequency、fill

public class TestCollections {        public static void main(String[] args) {        //Collections 对集合操作的类        List
list = new ArrayList<>(); //向集合中添加多个元素 Collections.addAll(list, "aa","cc","bb"); System.out.println(list); //自然升序排序 Collections.sort(list); System.out.println(list); //指定比较器排序// Collections.sort(list, (s1,s2)->s2.compareTo(s1)); System.out.println(list); //二分查找 :前提 是 自然升序排序 System.out.println(Collections.binarySearch(list, "cc")); //最大值 和 最小值 System.out.println(Collections.max(list));// System.out.println(Collections.min(list));// //反转集合的元素 Collections.reverse(list); System.out.println(list); //元素 在 集合中出现的次数 Collections.addAll(list, "aa","aa"); System.out.println(Collections.frequency(list, "aa")); //洗牌 Collections.shuffle(list); System.out.println(list); //填充 Collections.fill(list, "xxx"); System.out.println(list); }}

 

转载地址:http://vkqcx.baihongyu.com/

你可能感兴趣的文章
kindeditor.net应用
查看>>
函数preg_replace()与str_replace()
查看>>
Linux c括号作用域【原创笔记】
查看>>
用IPFS和以太坊存储数据
查看>>
Confluent平台5.0支持LDAP授权及用于IoT集成的MQTT代理
查看>>
诡异的xen故障:xenconsole: Could not read tty from store: No such file or directory
查看>>
HTTP工具CURL的使用简介
查看>>
选择“Asp.Net Web应用程序”还是“Asp.Net网站”?
查看>>
Server 2008 R2 AD RMS完整部署:准备篇
查看>>
浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路...
查看>>
P2P的远程协助系统技术分析[转]
查看>>
在.NET开发中的单元测试工具之(1)——NUnit
查看>>
文件的散列与校验:.NET发现之旅(五)
查看>>
生产了十几年NAS的群晖,这次准备重新定义NAS
查看>>
大家都有的迷茫我也来了
查看>>
46次课(Nginx安装 、 默认虚拟主机、Nginx用户认证、Nginx域名重定向)
查看>>
c# 适配器模式的详细介绍
查看>>
windows2008支持多用户同时登录
查看>>
UEditor 1.2.5 for java 自定义配置
查看>>
js微模板引擎
查看>>