Java HashSet和LinkedHashSet的用法

类HashSet和LinkedHashSet都是接口Set的实现,两者都不能保存重复的数据。主要区别是HashSet不保证集合中元素的顺序,即不能保证迭代的顺序与插入的顺序一致。

而LinkedHashSet按照元素插入的顺序进行迭代,即迭代输出的顺序与插入的顺序保持一致。

以下是HastSet和LinkedHashSet的用法示例:

  1. import java.util.Collections;
  2. import java.util.HashSet;
  3. import java.util.Iterator;
  4. import java.util.LinkedHashSet;
  5. import java.util.Set;
  6. public class JavaTest {
  7. // HashSet不保证集合的迭代顺序;也许在某些时间迭代的顺序与插入顺序一致,但是不保证该顺序恒久不变。
  8. private static Set<Integer> mSetInt = new HashSet<Integer>();
  9. private static Set<String> mSetString = new HashSet<String>();
  10. // LinkedHashSet按照元素插入的顺序进行迭代,LinkedHashSet不是线程安全的。
  11. private static Set<Integer> mLinkedSetInt = Collections.synchronizedSet(new LinkedHashSet<Integer>());
  12. private static Set<String> mLinkedSetString = Collections.synchronizedSet(new LinkedHashSet<String>());
  13. /**
  14. * @param args
  15. */
  16. public static void main(String[] args) {
  17. for (int i = 0; i < 50; i++) {
  18. mSetInt.add(i);
  19. mSetString.add(String.valueOf(i));
  20. mLinkedSetInt.add(i);
  21. mLinkedSetString.add(String.valueOf(i));
  22. }
  23. Iterator<Integer> setIntIt = mSetInt.iterator();
  24. System.out.println("The sequence of HashSet for Integer:");
  25. while(setIntIt.hasNext()) {
  26. System.out.print(setIntIt.next() + " ");
  27. }
  28. System.out.println();
  29. System.out.println("The sequence of HashSet for String:");
  30. Iterator<String> setStringIt = mSetString.iterator();
  31. while(setStringIt.hasNext()) {
  32. System.out.print(setStringIt.next() + " ");
  33. }
  34. System.out.println();
  35. System.out.println("The sequence of LinkedHashSet for Integer:");
  36. Iterator<Integer> linkedSetIntIt = mLinkedSetInt.iterator();
  37. while(linkedSetIntIt.hasNext()) {
  38. System.out.print(linkedSetIntIt.next() + " ");
  39. }
  40. System.out.println();
  41. System.out.println("The sequence of LinkedHashSet for String:");
  42. Iterator<String> linkedSetStringIt = mLinkedSetString.iterator();
  43. while(linkedSetStringIt.hasNext()) {
  44. System.out.print(linkedSetStringIt.next() + " ");
  45. }
  46. System.out.println();
  47. }
  48. }

输出结果如下:

The sequence of HashSet for Integer:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 16 19 18 21 20 23 22 25 24 27 26 29 28 31 30 34 35 32 33 38 39 36 37 42 43 40 41 46 47 44 45 49 48 
The sequence of HashSet for String:
35 36 33 34 39 37 38 43 42 41 40 22 23 24 25 26 27 28 29 3 2 1 0 7 30 6 5 32 4 31 9 8 19 17 18 15 16 13 14 11 12 21 20 49 48 45 44 47 46 10 
The sequence of LinkedHashSet for Integer:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 
The sequence of LinkedHashSet for String:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

从输出结果看,如果HastSet中保存的是Integer类型和String类型的对象,迭代的顺序与插入的顺序不一致,其中String类型的元素不一致的情况比Integer类型的元素要明显的多。

map<string,map<string,string>>:map中map用法示例

include <iostream>
#include <map>
using namespace std;
int main()
{
    map<string,map<string,string> > mapmaps;
    map<string,string> mapmap;
    mapmap.insert(pair<string,string>("ysl","ysh"));
    mapmaps.insert(pair<string,map<string,string> >("ysy",mapmap));

    cout<<mapmaps.begin()->first<<endl;
    cout<<mapmaps.begin()->second.begin()->first<<endl;
    cout<<mapmaps.begin()->second.begin()->second<<endl;
    return 0;
}
结果:

ysy
ysl
ysh

Process returned 0 (0x0) execution time : 0.250 s
Press any key to continue.

Java HashSet和LinkedHashSet的用法的更多相关文章

  1. Java集合框架(二)—— HashSet、LinkedHashSet、TreeSet和EnumSet

    Set接口 前面已经简绍过Set集合,它类似于一个罐子,一旦把对象'丢进'Set集合,集合里多个对象之间没有明显的顺序.Set集合与Collection基本上完全一样,它没有提供任何额外的方法. Se ...

  2. 复习java基础第三天(集合:Collection、Set、HashSet、LinkedHashSet、TreeSet)

    一.Collection常用的方法: Java 集合可分为 Set.List 和 Map 三种体系: Set:无序.不可重复的集合. List:有序,可重复的集合. Map:具有映射关系的集合. Co ...

  3. Java集合系列(三):HashSet、LinkedHashSet、TreeSet的使用方法及区别

    本篇博客主要讲解Set接口的三个实现类HashSet.LinkedHashSet.TreeSet的使用方法以及三者之间的区别. 注意:本文中代码使用的JDK版本为1.8.0_191 1. HashSe ...

  4. Java中的集合HashSet、LinkedHashSet、TreeSet和EnumSet(二)

    Set接口 前面已经简绍过Set集合,它类似于一个罐子,一旦把对象'丢进'Set集合,集合里多个对象之间没有明显的顺序.Set集合于Collection基本上完全一样,它没有提供任何额外的方法. Se ...

  5. List,Set,Map在java.util包下都是接口 List有两个实现类:ArrayList和LinkedList Set有两个实现类:HashSet和LinkedHashSet AbstractSet实现了Set

    List,Set,Map在java.util包下都是接口 List有两个实现类:ArrayList和LinkedListSet有两个实现类:HashSet和LinkedHashSetAbstractS ...

  6. Java自学-集合框架 HashSet、LinkedHashSet、TreeSet之间的区别

    HashSet. LinkedHashSet.TreeSet之间的区别 步骤 1 : HashSet LinkedHashSet TreeSet HashSet: 无序 LinkedHashSet: ...

  7. [Java数据结构]HashSet,LinkedHashSet,TreeeSet

    Java中Set表示一个不包括重复元素的集合,它有HashSet,LinkedHashSet,TreeeSet三种常用实现. HashSet是Set的最常用实现,它常被用来清除重复元素. 例程: Se ...

  8. Java Set 常用集合 HashSet、LinkedHashSet、TreeSet

    Java 中的 Set 是非常常用的数据类型.Set 是无序的 Collection,Java Set 有三个常用的实现类,分别是:HashSet.LinkedHashSet.TreeSet 本文基于 ...

  9. Leetcode: LFU Cache && Summary of various Sets: HashSet, TreeSet, LinkedHashSet

    Design and implement a data structure for Least Frequently Used (LFU) cache. It should support the f ...

随机推荐

  1. django随笔说明

    最近学习了vamei的快速Python教程,想着语法学了不用就要忘记,总要拿点东西来练练手,然后又开始学习Django,也算是顺势而为吧. 现在学Django,是跟着教程djangobook学的,内容 ...

  2. linux 如何禁用账号和解除禁用账号

    把账号禁用可以有几个方法:1. # usermod -L <username> # usermod -U <username> // 解除禁用2. 修改/etc/passwd文 ...

  3. python作业day4计算器

    思路: 用循环提取最里面的括号,再进行运算 运算时利用正则表达式寻找相应的运算符 先进行乘除,再进行加减 (参考武sir和金角大王的代码) 流程图: 代码: #!/usr/bin/env python ...

  4. rdlc部署zt

    原文:rdlc部署zt 偶然间遇到“ 未能加载文件或程序集microsoft.reportviewer.winforms ……”的一个错误,以前web是遇到过,没想到winform部署也会遇到.找了半 ...

  5. JavaEE Tutorials (23) - 资源适配器和契约

    23.1什么是资源适配器362 23.1.1管理契约363 23.1.2通用工作上下文契约364 23.1.3出站和入站契约36423.2元数据注解36523.3公共客户端接口36623.4对Java ...

  6. editplus使用:非法字符: \65279

    众所周知,在跨程序的工程中,统一编码是至关重要的,而目前最普遍的则是统一采用“utf8”编码方案. 但是在采用utf8方案的时候,请注意编辑器的自作聪明. 比如editplus. 原因就在于某些编辑器 ...

  7. Windows下使用XManager访问Ubuntu 11.04的设置方法

    1.Download the attached file and upload it to the server. And, enter the following command to update ...

  8. JQuery(下)

    26.jQuery 中的 DOM 操作 )DOM(Document Object Model—文档对象模型):一种与浏览器, 平台, 语言无关的接口, 使用该接口可以轻松地访问页面中所有的标准组件 ) ...

  9. linux 学习之九、Linux 磁盘与文件系统管理(2)

    原文地址:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.php#filesys 磁盘挂载与卸除 挂载Ext2/Ext3文件系统 范例一: ...

  10. iOS 唯一设备号

    https://github.com/fabiocaccamo/FCUUID 目前比较好的解决方案.