一、总体框架

Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.* 。
Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)。
Java集合工具包框架图(如下):

大致说明:

看上面的框架图,先抓住它的主干,即Collection和Map。

1 、Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性。Collection包含了List和Set两大分支。

(1) List是一个有序的队列,每一个元素都有它的索引。第一个元素的索引值是0。List的实现类有LinkedList, ArrayList, Vector, Stack。

(2)Set是一个不允许有重复元素的集合。Set的实现类有HastSet和TreeSet。HashSet依赖于HashMap,它实际上是通过HashMap实现的;TreeSet依赖于TreeMap,它实际上是通过TreeMap实现的。

2、 Map是一个映射接口,即key-value键值对。Map中的每一个元素包含一个key和key对应的value,每一个key是唯一的。

(1)AbstractMap是个抽象类,它实现了Map接口中的大部分API。而HashMap,TreeMap,WeakHashMap都是继承于AbstractMap。
   (2)Hashtable虽然继承于Dictionary,但它实现了Map接口。

3、接下来,再看Iterator。它是遍历集合的工具,即我们通常通过Iterator迭代器来遍历集合。我们说Collection依赖于Iterator,是因为Collection的实现类都要实现iterator()函数,返回一个Iterator对象。其中,ListIterator是专门为遍历List而存在的。

4、再看Enumeration,它是JDK 1.0引入的抽象类。作用和Iterator一样,也是遍历集合;但是Enumeration的功能要比Iterator少。在上面的框图中,Enumeration只能在Hashtable, Vector, Stack中使用。

5、最后,看Arrays和Collections。它们是操作数组、集合的两个工具类

(来源:http://www.cnblogs.com/skywang12345/p/3308498.html)

二、List

List中ArrayList又最为常用。看ArrayList的使用例子:

package chapter11;
import java.util.ArrayList; public class TestArrayList { public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<String> cityList=new ArrayList<String>();
cityList.add("London");
cityList.add("Denver");
cityList.add("Paris");
cityList.add("Miami");
cityList.add("Seoul");
cityList.add("Tokyo"); System.out.println("List size is "+cityList.size()+
"\nIs Miami in the list? "+cityList.contains("Miami")+
"\nThe location of Denver in the list? "+cityList.indexOf("Denver")+
"\nIs the list empty? "+cityList.isEmpty()); cityList.add(2, "Xian");
cityList.remove("Miami");
cityList.remove(1); System.out.println(cityList.toString()); for(int i=cityList.size()-1;i>=0;i--){
System.out.print(cityList.get(i)+" ");
}
System.out.println(); } }

三、Set

1、Set不能存储相同的元素,同时因为其是一个抽象的接口,所以不能直接实例化一个set对象。(Set s = new Set() 是错误的 )

2、Set的两个实现是HashSet和TreeSet。他们都是单列集合,元素不可重复。HashSet无序,TreeSet会将里面的元素默认排序。

3、TreeSet的应用实例

Set<Integer> set = new TreeSet<>();
int a = 1;
int b = 8;
int c = 3; set.add(a);
set.add(b);
set.add(c); //遍历集合set ,利用foreach遍历
for (Integer value : set) {
System.out.print(value+" "); //输出结果:1 3 8
} //利用Iterator实现遍历
Iterator<Integer> value =set.iterator();
while (value.hasNext()) {
int c= value.next();
System.out.print(c+" "); //输出结果:1 3 8
}

  

四、Map

1、

如上图:
(1) Map 是映射接口,Map中存储的内容是键值对(key-value)Map映射中不能包含重复的键;每个键最多只能映射到一个值
(2) AbstractMap 是继承于Map的抽象类,它实现了Map中的大部分API。其它Map的实现类可以通过继承AbstractMap来减少重复编码。
(3) SortedMap 是继承于Map的接口。SortedMap中的内容是排序的键值对,排序的方法是通过比较器(Comparator)。
(4) NavigableMap 是继承于SortedMap的接口。相比于SortedMap,NavigableMap有一系列的导航方法;如"获取大于/等于某对象的键值对"、“获取小于/等于某对象的键值对”等等。 
(5) TreeMap 继承于AbstractMap,且实现了NavigableMap接口;因此,TreeMap中的内容是“有序的键值对”!
(6) HashMap 继承于AbstractMap,但没实现NavigableMap接口;因此,HashMap的内容是“键值对,但不保证次序”!
(7) Hashtable 虽然不是继承于AbstractMap,但它继承于Dictionary(Dictionary也是键值对的接口),而且也实现Map接口;因此,Hashtable的内容也是“键值对,也不保证次序”。但和HashMap相比,Hashtable是线程安全的,而且它支持通过Enumeration去遍历。
(8) WeakHashMap 继承于AbstractMap。它和HashMap的键类型不同,WeakHashMap的键是“弱键”

(来源:http://www.cnblogs.com/skywang12345/p/3308931.html)

2、以TreeMap为例,介绍用法

public class SortDemo {

    public static void main(String[] args) {
System.out.println("---------------- 默认排序结果-----------------");
createDefaultSortTreeMap();
System.out.println("---------------- 自定义排序结果-----------------");
createDefinitionSortTreeMap();
} public static void createDefaultSortTreeMap() {
TreeMap<String, String> map = new TreeMap<String, String>(); init(map);
print(map);
} public static void createDefinitionSortTreeMap() { TreeMap<String, String> map = new TreeMap<String, String>(new Comparator<String>() { @Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
} }); init(map);
print(map);
} public static void init(Map<String, String> map) {
map.put("c", "1");
map.put("a", "1");
map.put("bb", "1");
map.put("b", "1");
} public static void print(Map<String, String> map) {
Iterator<Entry<String, String>> it = map.entrySet().iterator();
while(it.hasNext()) {
Entry<String, String> entry = it.next();
System.out.println(entry.getKey() + " : " + entry.getValue());
}
} 结果:
---------------- 默认排序结果-----------------
a : 1
b : 1
bb : 1
c : 1
---------------- 自定义排序结果-----------------
c : 1
bb : 1
b : 1
a : 1  

注释:TreeMap 默认排序规则:按照key的字典顺序来排序(升序)。当然,也可以自定义排序规则:要实现Comparator接口。

(来源:https://www.cnblogs.com/chenmo-xpw/p/4922641.html)

五、List、Set、Map集合的遍历方法

1、List集合遍历

public class TraversingList {
/**
* @author zhuxun describe: 定一个List集合并遍历
*/
/** 定义一个List集合 */
public List<String> getList() {
List<String> list = new ArrayList<String>();
list.add("ZhuXun");
list.add("Jack Ma");
list.add("Kobe");
list.add("Andy Lau");
return list;
} /** 遍历list集合 */
public void traversingList(List<String> list) {
// 方法一:通过下标遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// 方法二:Iterator迭代器遍历
Iterator<String> itr = list.iterator();
while (itr.hasNext()) {
String str = itr.next();
System.out.println(str);
}
} public static void main(String[] args) {
TraversingList test = new TraversingList();
List<String> list = test.getList();// 获得List集合
test.traversingList(list);// 遍历List集合并输出
}
}

  

2、Set集合遍历

public class TraversingSet {
/**
* @author zhuxun describe: 定一个Set集合并遍历
*/
/** 定义一个Set集合 */
public Set<String> getSet() {
Set<String> set = new HashSet<String>();
set.add("ZhuXun");
set.add("Jack Ma");
set.add("Kobe");
set.add("Andy Lau");
return set;
} /** 遍历Set集合 */
public void traversingSet(Set<String> set) {
// 方法一:Iterator迭代器遍历
Iterator<String> itr = set.iterator();
while (itr.hasNext()) {
String str = itr.next();
System.out.println(str);
}
// 方法二:通过增强型for循环遍历
// 注:Set集合中不存在下标,因此无法通过下标遍历,对于Java编译器而言,方法一和方法二是等价的
for (String str : set) {
System.out.println(str);
}
} public static void main(String[] args) {
TraversingSet test = new TraversingSet();
Set<String> set = test.getSet();// 获得Set集合
test.traversingSet(set);// 遍历Set集合并输出
}
}

  

3、Map集合遍历

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map; public class TestMap {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "ab");
map.put(4, "ab");
map.put(4, "ab");// 和上面相同 , 会自己筛选,不会重复存储
System.out.println(map.size());
// 第一种:通过Map.keySet遍历key和value
for (Integer in : map.keySet()) {
//map.keySet()返回的是所有key的值
String str = map.get(in);//得到每个key多对用value的值
System.out.println(in + " " + str);
}
// 第二种:通过Map.entrySet使用iterator遍历key和value
Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, String> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
// 第三种:通过Map.entrySet遍历key和value,推荐,尤其是容量大时
for (Map.Entry<Integer, String> entry : map.entrySet()) {
//Map.entry<Integer,String> 映射项(键-值对) 有几个方法:用上面的名字entry
//entry.getKey() ;entry.getValue(); entry.setValue();
//map.entrySet() 返回此映射中包含的映射关系的 Set视图。
System.out.println("key= " + entry.getKey() + " and value= "
+ entry.getValue());
}
// 第四种:通过Map.values()遍历所有的value,但不能遍历key
for (String v : map.values()) {
System.out.println("value= " + v);
}
}
}

(来源:https://www.cnblogs.com/blest-future/p/4628871.html)

java集合框架整理的更多相关文章

  1. Java集合框架 面试问题整理

    简介 java集合类是java.util 包中的重要内容.java集合框架包含了大量集合接口以及这些接口的实现类和操作他们的算法. java集合框架图 主要提供的数据结构 List 又称有序的Coll ...

  2. Java集合框架(不全,待继续整理)

    技术在线学习网站: https://www.runoob.com/java/java-collections.html 从上面的集合框架图可以看到: 1.Java 集合框架主要包括两种类型的容器: 1 ...

  3. (转)Java集合框架:HashMap

    来源:朱小厮 链接:http://blog.csdn.net/u013256816/article/details/50912762 Java集合框架概述 Java集合框架无论是在工作.学习.面试中都 ...

  4. Java集合框架:HashMap

    转载: Java集合框架:HashMap Java集合框架概述   Java集合框架无论是在工作.学习.面试中都会经常涉及到,相信各位也并不陌生,其强大也不用多说,博主最近翻阅java集合框架的源码以 ...

  5. Java集合框架梳理(含经典面试题)

    Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构. 1. 整体框架 Java容器类库一共有两种主要类型:Collection ...

  6. 知识点:Java 集合框架图

    知识点:Java 集合框架图 总结:Java 集合进阶精讲1 总结:Java 集合进阶精讲2-ArrayList Java集合框架图 我们经常使用的Arrayist.LinkedList继承的关系挺复 ...

  7. JAVA—集合框架

    ref:https://blog.csdn.net/u012961566/article/details/76915755 https://blog.csdn.net/u011240877/artic ...

  8. [转载]Java集合框架的常见面试题

    http://www.jfox.info/40-ge-java-ji-he-lei-mian-shi-ti-he-da-an 整理自上面链接: Java集合框架为Java编程语言的基础,也是Java面 ...

  9. Java集合框架中的元素

    之前有一篇笔记,讲的是集合和泛型,这几天看Java集合中几个接口的文档,思绪非常混乱,直到看到Oracle的“The Collections Framwork”的页面,条理才清晰些,现在进行整理. 一 ...

随机推荐

  1. having使用

    啰嗦点: where子句用来筛选 from子句中指定的操作所产生的行. group by 子句用来分组 where子句的输出. having子句用来从分组的结果中筛选行. 对于可以在分组操作之前或之后 ...

  2. Beginning Python Games Development

    Like music and movies, video games are rapidly becoming an integral part of our lives. Over the year ...

  3. SQL数据库的操作,表的操作

    数据库定义语言(DDL):用于对数据库及数据库中的各种对象进行创建,删除,修改等操作 (1)create:用于创建数据库或数据库对象 (2)alter:用于对数据库或数据库对象进行修改 (3)drop ...

  4. sql查询重复值

    SELECT COUNT(字段name) AS con,字段name,重复字段pc FROM 表名 GROUP BY 重复字段pc HAVING con>=

  5. SpringBoot的自动配置原理

    一.入口 上篇注解@SpringBootApplication简单分析,说到了@SpringBootApplication注解的内部结构, 其中@EnableAutoConfiguration利用En ...

  6. 适用于 Android 的 Visual Studio 模拟器

    适用于 Android 的 Visual Studio 模拟器 https://visualstudio.microsoft.com/zh-hans/vs/msft-android-emulator/ ...

  7. shell 命令 使用

    [root@ken ~]# cat ken.sh http://www.baidu.com http://www.baidu.com http://www.sina.com http://www.si ...

  8. 动态规划——Dungeon Game

    这又是个题干很搞笑的题目:恶魔把公主囚禁在魔宫的右下角,骑士从魔宫的左上角开始穿越整个魔宫到右下角拯救公主,为了以最快速度拯救公主,骑士每次只能向下或者向右移动一个房间, 每个房间内都有一个整数值,负 ...

  9. CentOS修改yum源

    在安装完CentOS后一般需要修改yum源,才能够在安装更新rpm包时获得比较理想的速度.国内比较快的有163源.sohu源.这里以163源为例子. 1. cd /etc/yum.repos.d 2. ...

  10. windows下编译SDL1.2

    首先,官网下载开发库,我这里用的是tdm-gcc,因此下载mingw版的. 解压,写代码,编译…… 成功!...地出错了 这里提一下,编译命令是 g++ test.cpp -I include目录  ...