HashSet 是一个什么样的容器呢?

在给HashSet容器对象添加元素时,利用散列函数。是无序的,不能添加相同元素的。

package Set;import java.util.HashSet;
import java.util.Iterator;import ArrayList.Person;public class HashSetDemo {/*** HashSet  特点:元素唯一。无序的。*/public static void main(String[] args) {HashSet hash = new HashSet();hash.add(new Person("one",21));hash.add(new Person("two",22));hash.add(new Person("three",23));hash.add(new Person("four",24));hash.add(new Person("four",24));Iterator it = hash.iterator();System.out.println(hash);while(it.hasNext()){
//          System.out.println("name"+((Person) it.next()).getName()+"    age"+((Person) it.next()).getAge());Person p = (Person) it.next();System.out.println("name > "+p.getName()+"   age "+p.getAge());}}}

==============================================================================================================================

TreeSet 是一个什么样的容器呢?

在给TreeSet容器添加对象的时候,改容器会自动给添加的元素排序。在排序过程中,判断比较函数的比较结果,如果比较函数返回0,说明两个元素相等。不存。

如果该对象自身实现了Comparable接口的comparableTo()方法。着利用之。否则需要在该元素类中实现Comparable的comparableTo()方法。再利用该方法进行比较,排序。如果想自定义排序方法。可以写一个比较类。在创建TreeSet对象时,传入该比较类对象即可。如:TreeSet ts = new TreeSet(new CompartorByname());

package Set;import java.util.Iterator;
import java.util.TreeSet;import ArrayList.Person;public class TreeSetDemo {/*** TreeSet 继承 Set* TreeSet在输入的过程中对元素按照指定顺序进行了排序。* 如果对象没有比较方法,需要实现Comparable接口的compareableTo()方法。* 在排序过程中,判断比较函数的比较结果,如果比较函数返回0,说明两个元素相等。不存。* */public static void main(String[] args) {TreeSet ts = new TreeSet(new CompartorByname());ts.add(new Person("zhangsan",19));ts.add(new Person("lisi",28));ts.add(new Person("lisi1",18));ts.add(new Person("wangwu",20));ts.add(new Person("zhaoliu",26));
//      demo1();Iterator it = ts.iterator();while(it.hasNext()){System.out.println(it.next());}}private static void demo1() {TreeSet ts = new TreeSet();ts.add("one");ts.add("two");ts.add("three");ts.add("four");Iterator it = ts.iterator();while(it.hasNext()){System.out.println(it.next());}}}
package Set;import java.util.Comparator;import ArrayList.Person;public class CompartorByname implements Comparator {@Override/*** 当对象没有比较器时,或者不想用对象的比较器,可以自己创建比较器,创建时需要实现Compartor中的compare方法。* 并且在创建TreeSet时传入该比较器。* 创建一个Person 类的根据姓名的比较器*/public int compare(Object o1, Object o2) {Person p1 = (Person)o1;Person p2 = (Person)o2;int temp = p1.getName().compareTo(p2.getName());return   temp == 0 ? p1.getAge()-p2.getAge():temp;}
}

=================================================================

Map的基本方法演示。

接口 Map:一次添加一对元素(键key值value对,Map中键必须唯一)。主要用到了Map的实现类HashMap。

package Map;import java.util.HashMap;
import java.util.Map;public class MapDemo {/*** 接口 Map:一次添加一对元素(键key值value对,Map中键必须唯一)。Collection 一次添加一个元素。* Map 也成双列集合,Collection为单列集合。* * 常用方法* 1,添加* value    put(key,value);//返回以前与key相关联的值。* 2,删除* void clear();* value remove(key);根据指定的key删除对应的键值。* 3,判断* boolean containsKey(key);* boolean containsValue(Value);* boolean isEmpty();* 4,获取* value    get(key);//根据key拿值,没有的话 返回null。* int     size();//返回Map中的键值对个数。* */public static void main(String[] args) {Map<Integer,String> map = new HashMap<Integer,String>();method(map);}public static void method(Map<Integer,String> map){//添加map.put(19,"xiaoqiang");map.put(16,"zhangsan");map.put(4, "zhaoliu");map.put(23, "wangcai");//删除
//      map.remove(16);//判断
//      System.out.println(map.containsKey(4));//获得System.out.println(map.get(23));System.out.println(map);}}

二、如何获取Map集合中的元素呢?

方法一:

通过Map对象的ksySet()方法获得一个Set<E>集合对象(包含了所有的key值,key值唯一,所以用Set集合)。

格式:Set<E> setobj = mapobj.keySet();

通过key值可以获得元素的Value值。

在创建迭代器时注意要说明迭代器 类型。

格式:   Iterator<E>  itobj =  setobj.iterator(); (key的类型)

package Map;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;public class MapDemo2 {/*** 通过keySet 获取map中的对象。*/public static void main(String[] args) {//创建Map集合。Map<Integer,String> mapobj =new HashMap<Integer,String>();//添加map元素。mapobj.put(19,"xiaoqiang");mapobj.put(16,"zhangsan");mapobj.put(4, "zhaoliu");mapobj.put(23, "wangcai");//通过map的keyset方法 ,获取键值Set集合。Set<Integer> key_set = mapobj.keySet();//创建迭代器Iterator<Integer> itobj = key_set.iterator();while(itobj.hasNext()){Integer key = itobj.next();String value = mapobj.get(key);System.out.println(key+">>>>"+value);}}}
打印结果:
16>>>>zhangsan
19>>>>xiaoqiang
4>>>>zhaoliu
23>>>>wangcai

方法二:通过.entrySet() 获取map中的对象。

Map.Entry<K,V>为Map的内部嵌套接口类,主要方法 K getKey(); V   getValue();

通过mapobj的entrySet()方法 返回一个Set<Map.Entry<K,V>>集合类型。

格式:Set<Map.Entry<K,V>> setobj = mapobj.enterySet();

在创建<Map.Entry<K,V>>类型的迭代器

格式:Iterator<Map.Entry<K,V>> itobj = setobj.iterator();

在迭代过程中,创建Map.Entry<K,V>的接口对象来接受 itobj.next();

再通过 getKey();getValue();获得相应的Key、Value。

package Map;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;public class MapDemo3 {/*** 通过.EntrySet() 获取map中的对象。*/public static void main(String[] args) {Map<Integer,String> map = new HashMap<Integer,String>();method(map);}public static void method(Map<Integer,String> map){//添加map.put(19,"xiaoqiang");map.put(16,"zhangsan");map.put(4, "zhaoliu");map.put(23, "wangcai");//通过Map的entrySet()返回此映射中包含的映射关系的 Set 视图。  Map.Entry 为Map的内部接口类。 Set<Map.Entry<Integer,String>> entryset = map.entrySet();//创建Map.<Integer,String>类型的迭代器。Iterator<Map.Entry<Integer,String>> it = entryset.iterator();while(it.hasNext()){//获得Map.Entry<Integer,String>类型对象。Map.Entry<Integer,String> mm = it.next();//通过Map.Entry<Integer,String>类型对象,获得 key 和 value。String value = mm.getValue();Integer key = mm.getKey();System.out.println(key+"   。。。。 "+value);}System.out.println(map);}}

运行结果:

16   。。。。 zhangsan
19   。。。。 xiaoqiang
4   。。。。 zhaoliu
23   。。。。 wangcai
{16=zhangsan, 19=xiaoqiang, 4=zhaoliu, 23=wangcai}

三、其他方法。

只获取value值。通过mapobj的values();该方法返回一个Collection集合对象。因为value可以相同。所以不能用Set集合接受。

package Map;import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;public class MapDemo4 {/*** 只获取value值*/public static void main(String[] args) {Map<Integer,String> map = new HashMap<Integer,String>();method(map);}public static void method(Map<Integer,String> map){//添加map.put(19,"xiaoqiang");map.put(16,"zhangsan");map.put(4, "wangcai");map.put(23, "wangcai");Collection<String> values = map.values();Iterator<String> it = values.iterator();while(it.hasNext()){System.out.println(it.next());}}}

运行结果:

zhangsan
xiaoqiang
wangcai
wangcai

再赋一个程序:

MapDemo5:

package Set;import java.util.Comparator;import ArrayList.Person;public class CompartorByname implements Comparator {@Override/*** 当对象没有比较器时,或者不想用对象的比较器,可以自己创建比较器,创建时需要实现Compartor中的compare方法。* 并且在创建TreeSet时传入该比较器。* 创建一个Person 类的根据姓名的比较器*/public int compare(Object o1, Object o2) {Person p1 = (Person)o1;Person p2 = (Person)o2;int temp = p1.getName().compareTo(p2.getName());return temp == 0 ? p1.getAge()-p2.getAge():temp;}
}

Person类程序:

package ArrayList;public class Person extends Object implements Comparable{private String name;private int age;private Object Person;public Person() {super();}public Person(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic int hashCode() {return name.hashCode() + age;}@Override// public boolean equals(Object obj) {//    Person p = (Person) obj;//     return name.equals(p.name) && age == p.age;// }public boolean equals(Object obj) {if (this == obj)return true;if (!(obj instanceof Person))throw new ClassCastException();Person p = (Person) obj;return name.equals(p.name) && age == p.age;}@Overridepublic String toString() {return this.name + ":" + age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic int compareTo(Object o) {Person p = (Person)o;if(this.age>p.age)return 1;if(this.age<p.age)return -1;return  this.name.compareTo(p.name);}}

HashSet 和 TreeSet 及 Map 集合的简单方法,含程序。相关推荐

  1. 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 find 方法遍历 map 集合 | 代码示例 )

    文章目录 一.使用 map 集合的 find 方法遍历 map 集合 二.代码示例 一.使用 map 集合的 find 方法遍历 map 集合 使用 map 集合的 find 方法遍历 map 集合 ...

  2. 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 each 方法遍历 map 集合 | 代码示例 )

    文章目录 一.使用 map 集合的 each 方法遍历 map 集合 二.代码示例 一.使用 map 集合的 each 方法遍历 map 集合 遍历 map 集合 , 可以调用 map 集合的 eac ...

  3. 集合框架(一) ----------Map集合遍历的方法

    import java.util.*; /** * Map集合遍历的方法 * @author Administrator * */ public class Test2 { public static ...

  4. Map集合使用get方法返回null抛出空指针异常问题

    Map集合使用get方法空指针异常问题 前言 1.Map里面只能存放对象,不能存放基本类型,例如int,需要使用Integer 2.Map集合取出时,如果变量声明了类型,会先进行拆箱,再进行转换. 空 ...

  5. java基础—Map集合的常见方法操作(java集合八)

    Map集合的常见方法操作 Map集合中的元素取出并打印的三种方式 import java.util.Collection; import java.util.HashMap; import java. ...

  6. Map集合的遍历方法

    2019独角兽企业重金招聘Python工程师标准>>> Map集合的遍历方法  一.通过Map.Keyset遍历key和value,普遍使用,二次取值 //定义一个Map集合 Map ...

  7. Map集合中的方法(添加、删除、判断、获取)

    /* Map集合:该集合存储键(K)值(V)对,一对一往里存,而且要保证键的唯一性. 1.添加 put(K key,V value) putAll(Map<? extends K,? exten ...

  8. java集合类讲解视频,关于java:实实在在面试List和Map集合面试合集含讲解视频

    前言 Tip:该笔记为B站面试解说视频的配套文档,B站搜寻"编程鹿"能够看到面试题解说视频 视频地址如下:奥利给 编程人-2020年Java大厂面试题集锦(面试必备 继续更新) h ...

  9. Properties作为Map集合的特有方法

    特有方法 方法名 说明 Object setProperty(String key, String value) 设置集合的键和值,都是String类型,底层调用 Hashtable方法 put St ...

最新文章

  1. 【学习笔记】MHP-VOS: Multiple Hypotheses Propagation for Video Object Segmentation
  2. 汇编:分段函数的值的计算
  3. 第三阶段 15_JavaWeb基础_JQuery的事件处理
  4. SpringBoot 利用过滤器Filter修改请求url地址
  5. Cobalt Strike 3.13的新功能
  6. brew update:以下未跟踪的工作树文件将被合并覆盖:
  7. 行业方案|“医疗”行业智能运维解决方案介绍
  8. Android RecyclerView 子条目(item)嵌套 RecyclerView
  9. 大话数据结构Java版第一节
  10. 运行vs2017安装程序自动退出的解决
  11. 【路由器无线桥接的步骤实现】水星路由器MW150R作为副路由器无线桥接TP-Link主路由器
  12. 论文的字数是怎么算的
  13. Field类及相关类解读
  14. 计算机考研对英语四六级有要求吗,2022考研指南|考研对英语四六级有要求吗?...
  15. win10 屏幕保护时间到了不触发_你真的了解Win10么?网友教你玩转Win10!
  16. 用计算机弹歌旧梦一场歌词,早知惊鸿一场何必情深一往是什么歌 《旧梦一场》歌词哪里听...
  17. C++二叉排序树代码实现
  18. macos 打开终端弹出:(eval):export:1: not valid in this context: Fusion.app/Contents/Public
  19. 《雷军:我向阿里学到了三点,这是创业成功的核心》有感
  20. Unity win平台 调整窗口大小强制固定比例

热门文章

  1. Spring定时任务并行(异步)处理
  2. Java的数据库编程之背景概述
  3. mfc读取bmp文件_LIUNX 工程bmp.c 显示图片 开发板出来的图片只有一个角 求大佬解决...
  4. git serialtool_Git学习笔记---协作的一般流程
  5. html5 标准结构_IT兄弟连 HTML5教程 HTML文件的主体结构
  6. 全网最好懂的Spring AOP原理
  7. Report Builder 3.0连接ORACEL数据库
  8. JavaScript:函数
  9. sql server 向mysql前移数据-单引号问题
  10. 项目中记录影响性能的缓慢数据库查询