Java中Set集合的使用

2018-03-27 11:27:09

Set类继承了Conllection类,是一种集合类。Set的实现类有三个,下面我们会一一来说这些的不一样。

     HashSet

         HashSet类按照哈希算法来存取集合中的对象,存取速度比较快。

         1.Set中是不能出现重复数据的。

         2.Set中可以出现空数据。

         3.Set中的数据是无序的。

         详细见demo:

        

[java] view plain copy

  1. Set<String> set = new HashSet<String>();  

  2.     for(int i= 0;i<6;i++){  

  3.     set.add(i+"");  

  4.     }  

  5.     set.add("3");       //重复数据,不会写入  

  6.     set.add(null);      //可以写入空数据  

  7.     Iterator<String> iter = set.iterator();  

  8.     while(iter.hasNext()){  

  9.     System.out.println(iter.next());        //输出是无序的  

  10.     }  

       这段执行之后的打印输出是:

[java] view plain copy

  1. null  

  2. 3  

  3. 2  

  4. 1  

  5. 0  

  6. 5  

  7. 4  

    LinkedHashSet

        这个相对于HashSet来说有一个很大的不一样是LinkedHashSet是有序的。LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。

       详细见demo:

[java] view plain copy

  1. Set<String> set = new LinkedHashSet<String>();  

  2. for(int i= 0;i<6;i++){  

  3.     set.add(i+"");  

  4. }  

  5. set.add("3");       //重复数据,不会写入  

  6. set.add(null);      //可以写入空数据  

  7. Iterator<String> iter = set.iterator();  

  8. while(iter.hasNext()){  

  9.     System.out.println(iter.next());        //输出是有序的  

  10. }  

         输出打印如下:

[java] view plain copy

  1. 0  

  2. 1  

  3. 2  

  4. 3  

  5. 4  

  6. 5  

  7. null  

 

    TreeSet

         TreeSet的特点是:

         1.不能写入空数据

         2.写入的数据是有序的。

         3.不写入重复数据

        详细见demo:

[java] view plain copy

  1. Set<String> set = new TreeSet<String>();  

  2. for(int i= 0;i<6;i++){  

  3.     set.add(i+"");  

  4. }  

  5. set.add("3");       //重复数据,不会写入  

  6. //set.add(null);        //不可以写入空数据        

  7. Iterator<String> iter = set.iterator();  

  8. while(iter.hasNext()){  

  9.     System.out.println(iter.next());        //输出是有序的  

  10. }  


     输出打印为:


[java] view plain copy

  1. 0  

  2. 1  

  3. 2  

  4. 3  

  5. 4  

  6. 5  


  • 2018-11-17 21:05:48

    Android ANR发生的原因总结和解决办法

    ANR的全称是application not responding,是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户当前xxx未响应,用户可选择继续等待或者Force Close。

  • 2018-11-17 21:08:09

    Android 单个应用的内存限制

    获取Android手机应用内存大小 手机不同其性能也不同,手机本身内存可能有大有小,所以针对每个应用的内存大小也不相同。

  • 2018-11-17 21:11:14

    Android中App可分配内存的大小

     结果:(1)未设定属性android:largeheap = "true"时,可以申请到的最大内存空间为221M。      (2)设定属性android:largeheap = "true"时, 可以申请的最大内存空间为478M,是原来的两倍多一些。

  • 2018-11-17 22:44:53

    LeakCanary,30分钟从入门到精通

    在性能优化中,内存是一个不得不聊的话题;然而内存泄漏,显示已经成为内存优化的一个重量级的方向。当前流行的内存泄漏分析工具中,不得不提的就是LeakCanary框架;这是一个集成方便, 使用便捷,配置超级简单的框架,实现的功能却是极为强大的。

  • 2018-11-17 22:53:01

    gc for alloc freed

    在数组中选择图片然后显示,然后。。。logcat不断显示GC回收。最后程序黑屏。

  • 2018-11-17 23:25:38

    Android高效内存1:一张图片占用多少内存

    在做内存优化的时候,我们发现除了解决内存泄露问题,剩下的就只有想办法减少真实的内存占用。而在App中,大部分内存可能被我们图片占用了,所以减少图片的内存占用可以带来直接的效果。本文就简单介绍一张图片到底占用多少内存,我们先假设我们有一张图片时 600 * 800 的,图片占用空间大小假设是 100KB。另外本文知识点也是面试官喜欢问的一个点,看看自己的回答到什么级别了。

  • 2018-11-18 09:06:06

    Android子线程中更新UI的3种方法

    UI的更新必须在主线程中完成,所以不管上述那种方法,都是将更新UI的消息发送到了主线程的消息对象,让主线程做处理。