1 集合的框架体系

List简介

集合的使用场合

List(链表|线性表)和Set(集)

java.util.Collection
---| Collection 描述所有接口的共性
----| List接口 可以有重复元素的集合
----| Set 接口 不可以有重复元素的集合

List的方法:

增加:
1:add() 将指定对象存储到容器中
add 方法的参数类型是Object 便于接收任意对象
2:addAll() 将指定集合中的元素添加到调用该方法和集合中
删除:
3:remove() 将指定的对象从集合中删除
4:removeAll() 将指定集合中的元素删除
修改
5:clear() 清空集合中的所有元素
判断
6:isEmpty() 判断集合是否为空
7:contains() 判断集合何中是否包含指定对象 8:containsAll() 判断集合中是否包含指定集合
使用equals()判断两个对象是否相等
获取: 9:int size() 返回集合容器的大小 转成数组 10: toArray() 集合转换数组

Set简介

1.它不允许出现重复元素;
2.不保证集合中元素的顺序
3.允许包含值为null的元素,但最多只能有一个null元素。

HashSet

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

Set<String> set = new HashSet<String>();
for(int i= 0;i<6;i++){
set.add(i+"");
}
set.add("3"); //重复数据,不会写入
set.add(null); //可以写入空数据
Iterator<String> iter = set.iterator();
while(iter.hasNext()){
System.out.println(iter.next()); //输出是无序的
}

TreeSet
TreeSet的特点是:

1.不能写入空数据

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

3.不写入重复数据

Set<String> set1 = new LinkedHashSet<String>();
for(int i= 0;i<6;i++){
set1.add(i+"");
}
set1.add("3"); //重复数据,不会写入
set1.add(null); //可以写入空数据
Iterator<String> iter1 = set1.iterator();
while(iter1.hasNext()){
System.out.println(iter1.next()); //输出是有序的
}

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

Set<String> set2 = new TreeSet<String>();
for(int i= 0;i<6;i++){
set2.add(i+"");
}
set2.add("3"); //重复数据,不会写入
//set.add(null); //不可以写入空数据
Iterator<String> iter2 = set2.iterator();
while(iter2.hasNext()){
System.out.println(iter2.next()); //输出是有序的
}

Map详解

java中的map集合使用键(key)值(value)来保存数据,其中值(value)可以重复,但键(key)必须是唯一,也可以为空,但最多只能有一个key为空,它的主要实现类有HashMap、LinkedHashMap、TreeMap。

Map方法:

HashMap、LinkedHashMap、TreeMap区别及用法

HashMap

特点:保存元素时先进后出无序性;查询效率比较高;key-value可以为null,但最多只能为一个null;不支持线程同步,即可以有多个线程同时写HashMap,可能导致数据不一致,如果需要同步可以使用Collection的synchronizedMap方法使其同步。

示例:

Map<String,String> map=new HashMap<String, String>();
//使用put添加元素
map.put("name","张三");
map.put("sex","男");
map.put("age","12");
map.put("addres","深圳");
map.put("iPhone","13068706819");
//存放两个key-value为空的元素,打印时出现一个
map.put(null, null);
map.put(null, null);  

LinkedHashMap
特点:LinkedHashMap内部是双向链表结构,保存了元素插入的顺序,Iterator遍历元素时按照插入的顺序排列,支持线程同步。

代码:

Map<String,String> map1=new LinkedHashMap<String,String>();
//使用put添加元素
map1.put("name","张三");
map1.put("sex","男");
map1.put("age","12");
map1.put("addres","深圳");
map1.put("iPhone","13068706819");
map1.put(null, null);
System.out.println("linkedhashmap元素按照插入的顺序排列:"+map1);

TreeMap
特点:保存元素key-value不能为null遍历元素时随机排列。

代码:

Map<String, String> map2 = new TreeMap<String, String>();
map2.put("name", "张三");
map2.put("sex", "男");
map2.put("age", "12");
map2.put("addres", "深圳");
map2.put("iPhone", "13068706818");
System.out.println("treemap元素随机排列"+map2);

HashTable

(1)Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。

(2)Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。

(3)Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。

public class HashTableTest {  

    public static void main(String args[]){
Hashtable<String, Integer> table = new Hashtable<String, Integer>(); //[1]添加元素
table.put("zhangsan", 22);
table.put("lisi", 33);
table.put("wangwu", 44); //[2]toString()方式打印
System.out.println(table.toString()); //[3]Iterator遍历方式1--键值对遍历entrySet()
Iterator<Entry<String, Integer>> iter = table.entrySet().iterator();
while(iter.hasNext()){
Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>)iter.next();
String key = entry.getKey();
int value = entry.getValue();
System.out.println("entrySet:"+key+" "+value);
} System.out.println("===================================="); //[4]Iterator遍历方式2--key键的遍历
Iterator<String> iterator = table.keySet().iterator();
while(iterator.hasNext()){
String key = (String)iterator.next();
int value = table.get(key);
System.out.println("keySet:"+key+" "+value);
} System.out.println("===================================="); //[5]通过Enumeration来遍历Hashtable
Enumeration<String> enu = table.keys();
while(enu.hasMoreElements()) {
System.out.println("Enumeration:"+table.keys()+" "+enu.nextElement());
} }
}

构造函数

// 默认构造函数。
public Hashtable() // 指定“容量大小”的构造函数
public Hashtable(int initialCapacity) // 指定“容量大小”和“加载因子”的构造函数
public Hashtable(int initialCapacity, float loadFactor) // 包含“子Map”的构造函数
public Hashtable(Map<? extends K, ? extends V> t)

Hashtable和HashMap到底有哪些不同呢

(1)基类不同:HashTable基于Dictionary类,而HashMap是基于AbstractMap。Dictionary是什么?它是任何可将键映射到相应值的类的抽象父类,而AbstractMap是基于Map接口的骨干实现,它以最大限度地减少实现此接口所需的工作。

(2)null不同:HashMap可以允许存在一个为null的key和任意个为null的value,但是HashTable中的key和value都不允许为null。

(3)线程安全:HashMap时单线程安全的,Hashtable是多线程安全的。

(4)遍历不同:HashMap仅支持Iterator的遍历方式,Hashtable支持Iterator和Enumeration两种遍历方式。

 

声明:灰常之不好意思,这篇文章参考了好几个博主君,我没记住,特此声明,灰常感谢!

最新文章

  1. linpe包-让发送和接收数据分析更快和更容易
  2. extjs4_msg
  3. C# 视频流操作
  4. Spring MVC学习笔记——Welcome
  5. 【C#进阶系列】09 关于参数的故事
  6. 极客教学:如何使用树莓派击落&amp;劫持无人机
  7. linux下异步IO的简单例子【转】
  8. OpenFlow Switch学习笔记(三)——Flow Tables
  9. Swift学习笔记十五
  10. maven中使用net.sf.json-lib
  11. Python重写C语言程序100例--Part1
  12. 用Unity做的一个小游戏,仿照一个样例写的,个人认为文章写的不错,哈哈
  13. Embedded Linux Primer----嵌入式Linux基础教程--前言
  14. Hibernate在自由状态和持久的状态转变
  15. How To Add Swap on Ubuntu 14.04
  16. HDU 3339 最短路+01背包
  17. Chrome浏览器扩展开发系列之十八:扩展的软件国际化chrome.i18n API
  18. Gitbucket—快速建立自己的Github
  19. break退出循环分析
  20. MTK-LCM 屏幕使用fbconfig/PanelMaster来调试LCM驱动

热门文章

  1. 使用泛型与不使用泛型的Map的遍历
  2. python爬虫#数据存储#JSON/CSV/MYSQL/MongoDB/
  3. ACM1000:A + B Problem
  4. 使用bison和yacc制作脚本语言(1)
  5. LeetCode二叉树实现
  6. [python]安装wxpython的时候遇到问题记录
  7. 本地生成Rails API文档
  8. sphinx生成cakephp文档
  9. 韩国KT软件NB-IOT开发记录V150(2)IOT maker通信相关
  10. Qt 报错onecoreuap\inetcore\urlmon\zones\zoneidentifier.cxx(359)\urlmon.dll!00007FF9D9FA5B50: