------------ Set -------------------

有序: 根据添加元素顺序判定, 如果输出的结果和添加元素顺序是一样

无序: 根据添加元素顺序判定,如果输出的结果和添加元素的顺序是不一样的

-----------------------------------------------------------

特点: 无序,不能包含重复元素

去重:

   HashSet 判定对象的hashCode值是相同,如果相同会调用equals比较2个对象的内存地址是否一致

       自定义对象去重都会重写hashCode和equals方法

   TreeSet  添加进去元素必须实现Comparable接口->compareTo()方法实现过程中有自己的实现一套去重算法

Set

-- HasheSet

  - LinkedHashSet

-- SortedSet

  -- TreeSet(排序,并且自动去重)

-- HashSet底层实质是HashMap

-- 进行了HashSet,LinkedHashSet,TreeSet性能比较

HashSet: 无序,元素唯一

LinkedHashSet: 有序,并且保证元素唯一性

TreeSet: 无序,在compareTo方法定义排序算法

----------------- Map ---------------------

Map<key,value>

存储:是以键key,值value方式存储的

key: 无序,不能重复 - > Set集合

value: 可以包含重的值 - > List集合

map = new HashMap();

map.put("字",1192);

map.put(13297086608,"G");

map.put(271314998,"G");

// 通过key获取值

map.get(key);

map.get("字") // 1192

map.get(21314998) // G

// 遍历map集合,只需要key

map.keySet() ==> Set集合

map.values() ==> Collection

/

for (Object key : map.keySet()) {

Object value = map.get(key);

}

// HashMap和HashTable比较

1、HashMap的key和value都可以为null,而HashTable的key和value都不能为null

2、HashMap是非线程安全,而HashTable是线程安全的

3、HashMap性能比HashTale性能要高,使用率也最多的

set

package com.set.demo.entity;public class Person implements Comparable {private Integer id; // 学生编号是唯一private String name;public Person() {}public Person(Integer id, String name) {this.id = id;this.name = name;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int hashCode() {return this.getName().hashCode() + this.getId().hashCode();}@Overridepublic boolean equals(Object obj) {Person p = null;if (obj instanceof Person) {p = (Person) obj;}// 学号和姓名都完全一样我就认为是同一个学生return p.getId().equals(this.getId()) && p.getName().equals(this.getName());}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + "]";}@Overridepublic int compareTo(Object o) {// TODO Auto-generated method stub// 比较的过程返回3个值 >0, =0, <0// this 指即将添加到集合的元素// o代表与this比较的元素Person p = (Person) o;System.out.println(o+"-----------"+this);return p.getId() - this.getId();/*return p.getName().hashCode() - this.getName().hashCode() > 0 ? 1 :(p.getName().hashCode() - this.getName().hashCode()==0 ? 0 : -1);*/}}

Set方法
package com.set.demo;import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;/*** Collection*  - Set接口*    特点: 无序,并且不能包含重复元素* @author Administrator**/
public class SetDemo {public static void main(String[] args) {/*boolean add(E o); boolean addAll(Collection c);   int size();  boolean contains(Object o);  boolean isEmpty();  void clear();  Iterator<E> iterator();boolean remove(Object o);  boolean removeAll(Collection c);boolean retainAll(Collection c); */Set set = new HashSet();set.add("1AAA");set.add("AAA");set.add("CCC");set.add("AAA");set.add("BBB");set.add(new Object());set.add(new Object());set.addAll(Arrays.asList("AAA","VVV","BBB"));// 判断是否包含CCC字符串对象System.out.println(set.contains("CCC"));// 获取集合中元素个数System.out.println("set集合中有:"+set.size());// 清空集合中的元素// set.clear();// 判断集合中是否有元素
        System.out.println(set.isEmpty());// 使用迭代器输出这个集合中的每一个元素Iterator it = set.iterator();while (it.hasNext()) {System.out.print(it.next() + " ");}System.out.println("\r\n");// 移除指定的元素set.remove("1AAA");// 移除指定集合中的所有元素set.removeAll(Arrays.asList("AAA","BBB","CCC"));System.out.println(set);}
}

Set去重
package com.set.demo;import java.util.HashSet;
import java.util.Set;import com.set.demo.entity.Person;/*** Set集合接口是无序,不重复* * 添加元素的时候判断集合中是否有相同的hashcode值,* 如果有相同触发equals比较对象中各个属性完全一致认为是同一个对象* 如果有个属性不同,认为不是同一个对象* @author Administrator**/
public class SetDemo1 {public static void main(String[] args) {Set set = new HashSet();set.add(new Person(1001, "张三"));set.add(new Person(1001, "张三"));set.add(new Person(1002, "李四"));set.add(new Person(1003, "王五"));set.add(new Person(1004, "王五1"));set.add(new Person(1005, "王五2"));set.add(new Person(1006, "王五3"));set.add(new Person(1007, "王五4"));set.add(new Person(1008, "王五5"));set.add(new Person(1009, "王五6"));set.add(new Person(1010, "王五7"));System.out.println(set);}
}

TreeSet排序
package com.set.demo;import java.util.TreeSet;import com.set.demo.entity.Person;/*** 排序实现类* @author Administrator**/
public class TreeSetDemo {public static void main(String[] args) {// 必须让其排序的类实现排序算法()TreeSet treeSet =new TreeSet();treeSet.add(new Person(1001,"账务"));treeSet.add(new Person(1010,"账务1"));treeSet.add(new Person(1005,"账务2"));treeSet.add(new Person(1002,"账务3"));for (Object obj : treeSet) {System.out.println(obj);}}
}

比较三种set集合子类性能
package com.set.demo.entity;public class Cat implements Comparable {private int size;public Cat(int size) {this.size = size;}@Overridepublic int compareTo(Object o) {Cat cat = (Cat) o;return this.size - cat.size;}
}

package com.set.demo;import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;import com.set.demo.entity.Cat;/*** 比较三种set集合子类性能* HashSet* TreeSet* LinkedHashSet* @author Administrator**/
public class LinkedHashSetDemo {public static void main(String[] args) {Random rd = new Random();testHashSet(rd);testTreeSet(rd);testLinkedHashSet(rd);}private static void testLinkedHashSet(Random rd) {LinkedHashSet set = new LinkedHashSet();long startTime = System.nanoTime();for (int i = 0; i < 1000; i++) {int size = rd.nextInt(1000) + 1;set.add(new Cat(size));}long endTime = System.nanoTime();System.out.println("LinkedHashSet用时:"+(endTime - startTime));}private static void testTreeSet(Random rd) {TreeSet set = new TreeSet();long startTime = System.nanoTime();for (int i = 0; i < 1000; i++) {int size = rd.nextInt(1000) + 1;set.add(new Cat(size));}long endTime = System.nanoTime();System.out.println("TreeSet用时:"+(endTime - startTime));}private static void testHashSet(Random rd) {HashSet set = new HashSet();long startTime = System.nanoTime();for (int i = 0; i < 1000; i++) {int size = rd.nextInt(1000) + 1;set.add(new Cat(size));}long endTime = System.nanoTime();System.out.println("HashSet用时:"+(endTime - startTime));}
}

去重实例
package com.set.demo;import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;import com.set.demo.entity.Person;/*** 去重实例* @author Administrator**/
public class DulipulteDemo {public static void main(String[] args) {// List集合List personList = new ArrayList();// 存储学生personList.add(new Person(1004,"晴天"));personList.add(new Person(1004,"晴天"));personList.add(new Person(1001,"安悟"));personList.add(new Person(1002,"不忘你"));personList.add(new Person(1003,"Army"));personList.add(new Person(1004,"晴天"));personList.add(new Person(1004,"晴天"));personList.add(new Person(1004,"晴天"));personList.add(new Person(1004,"晴天"));// 定义去冲方法
        getNewList(personList);System.out.println(personList);}/*** 定义去重集合中对象的方法* @param personList*/private static void getNewList(List personList) {Set set = new TreeSet();set.addAll(personList);// 清空原有集合
        personList.clear();// 把set集合中元素添加到list集合中
        personList.addAll(set);}
}

Map  
package com.map.demo;import java.util.Collections;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;/*** Map集合特点:*        以键值对方式存储的*      key     value*      key1    value1*      *      key不能重复,值可以重复*      HashMap中key和value都可以为null* @author Administrator**/
public class MapDemo {public static void main(String[] args) {// Map集合是以键作为获取value依据Map  map = new HashMap();map.put("aaa", "aaa对应的值");map.put("bbb", "bbb的值");map.put(1, "1key对应值");map.put(null, null);map.put("xxxxxx", "王五");map.put("http://xxxxx/1322443", "java进阶班教室");System.out.println(map.get(null));System.out.println(map);System.out.println(map.keySet()); // Set  不能包含重复System.out.println(map.values()); // List 可以包含重复System.out.println("------------------------");// 可以通过key遍历Map集合for (Object obj : map.keySet()) {Object key = obj;Object value = map.get(obj);System.out.println("key="+key+"-----------value="+value);}// HashMap和HashTable区别://1、 HashMap的键值都可以为null,而HashTable的键和值都不能为null的。//2、HashMap是非线程安全的,而HashTable是线程安全的。//3、HashTale的性能比HashMap性能要低。// 创建线程安全的Map集合Map map2 = Collections.synchronizedMap(new HashMap());Hashtable hashTable = new Hashtable();//hashTable.put("AAA", null);System.out.println("-------------------------");SortedMap sortedMap = new TreeMap();sortedMap.put("AAA", "AAAA");sortedMap.put("1BBB", "BBBB");sortedMap.put("aCCC", "CCCC");sortedMap.put("DDD", "DDDD");sortedMap.put("EEE", "EEEE");System.out.println(sortedMap);}
}

转载于:https://www.cnblogs.com/sunBinary/p/10486566.html

Set集合[HashSet,TreeSet,LinkedHashSet],Map集合[HashMap,HashTable,TreeMap]相关推荐

  1. Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)

    概要 学完了Map的全部内容,我们再回头开开Map的框架图. 本章内容包括: 第1部分 Map概括 第2部分 HashMap和Hashtable异同 第3部分 HashMap和WeakHashMap异 ...

  2. 浅谈集合List,Set以及Map集合的特点及区别

    集合List Set以及Map的区别 要想了解三者的区别,我们想来看看java的集合框架图 接着就需要从它们各自的特点来说 1.List的主要特点及用法 1.1 可以允许存储重复的对象 1.2 可以插 ...

  3. HashMap,HashTable,TreeMap,HashSet,TreeSet

    注意:最好先看一下(三)中 树红黑树的数据结构分析,可以的话数组,链表的数据结构也先复习一下,这里默认你懂数组,链表 2.2 map Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对 ...

  4. 集合类(collection、List、Set、Map、HashMap、TreeMap、、Properties、泛型类、可变长参数、增强for循环、Collections、数组与链表)

    集合类 0.集合类概述 1.Collection 概念 (1)Collection接口的API (2)Iterator接口(collection集合的遍历) 案例:collection集合存储学生对象 ...

  5. HashMap Hashtable TreeMap的异同点

    第1部分 Map概括 Map 是"键值对"映射的抽象接口. AbstractMap 实现了Map中的绝大部分函数接口.它减少了"Map的实现类"的重复编码. S ...

  6. 集合-2(Set(HashSet、TreeSet、LinkedHashSet)、List(ArrayList、LinkedList、Vector)、Map(HashMap、TreeMap...))

    1.Set接口 集合中的元素不能重复,所以存入Set的元素都必须定义equals()来确保对象的唯一性. 无序.无索引 1.1HashSet类 实现了Set接口,此实现不是同步的. 由哈希表支持.实际 ...

  7. HashSet 和 TreeSet 及 Map 集合的简单方法,含程序。

    HashSet 是一个什么样的容器呢? 在给HashSet容器对象添加元素时,利用散列函数.是无序的,不能添加相同元素的. package Set;import java.util.HashSet; ...

  8. java集合: List、Set、Map总结 + HashMap/Hashtable 差别

    List:(有序,能够反复)通过下标索引 ----ArrayList  可变数组,随机查找 ----LinkedList    链表,不论什么位置插入删除快 ----Vector    效率比arra ...

  9. java:集合(Collection【List(ArrayList Vector LinkedList)、set】、Map【hashMap、treeMap、hashtable、properties】)

    目录 集合的框架体系 一.Collection接口和常用方法 1.1   List接口和常用方法 1.1.1   ArrayList底层结构和源码分析 1.1.2 Vector底层结构 1.1.3 L ...

最新文章

  1. Git清除本地账号密码/保存账号密码
  2. 车提示检测轮胎气压_无钥匙启动的车启动后,车主带着钥匙离开车,能不能把车开走?...
  3. python 多进程 multiprocessing 进程池pool报错 in join assert self._state in (CLOSE, TERMINATE) AssertionError
  4. python运输问题_叶片运输优化问题学习笔记
  5. mysql ldf文件太大_Linux_数据库清除日志文件(LDF文件过大),清除日志: 复制代码 代码如 - phpStudy...
  6. python绘制图像的参数_图像绘制.draw.line():系统错误:新样式getargs格式,但参数不是tup...
  7. arithmetic java_Java:Arithmetic
  8. PowerDesigner导出Report通用报表
  9. 自动控制原理第二版王建辉_气箱脉冲布袋除尘器的工作原理
  10. 香港中文大学MMLab期待优秀同学加入~
  11. 【kafka】Kafka Connect中的增量协同平衡
  12. T-SQL语句之创建、修改、删除数据库
  13. 参数嗅探_SQL Server 2016参数嗅探
  14. RMAN 学习过程之四,备份演练进阶篇
  15. UEFI开发探索75- YIE001PCIe开发板(08 跑马灯实验)
  16. 00套经典机械结构设计非标自动化SW机构3D图纸solidWorks模型库
  17. 20个Mac软件下载常用的经典网站
  18. Java8 新特性之 Stream 练习题
  19. Java获取Excel表格的真实行数
  20. LeetCode岛屿的最大面积

热门文章

  1. ie6使用绝对定位position:absolute,box不显示
  2. 相机标定(2)opencv2实现
  3. 地铁 java_怎么用Java编写一个地铁售票机的程序?
  4. 7-87 吉老师的回归 (15 分)
  5. OA办公自动化系统~~~SSM整合开发
  6. arcgis导入坐标点转面_ArcGIS问题:如何将坐标点或者点文件转换成线、面文件
  7. LeetCode-321 Create Maximum Number
  8. nodejs学习(一)--express+ejs生成项目
  9. Linux下使用wget下载FTP服务器文件
  10. 一行或多行文本内容溢出显示省略号