一、集合框架图

二、Collection接口

    Collection中可以存储的元素间无序可以重复的元素。
    Collection接口的子接口List和Set,Map不是Collection的子接口。

三、List接口

List接口中的元素的特点:

List中的元素有序,可以重复。

    两个常用的实现类ArrayList和LinkedList
    1,ArrayList
        类似数组形式存储,访问数度快,增删慢,线程不安全。
        Vector是ArrayList的多线程的一个替代品。
        ArrayList遍历方式:
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("111");
list.add("222");
list.add("333");
//第一种遍历方法使用foreach遍历List
for (String str : list) {//也可以改写for(int i=0;i<list.size();i++)这种形式
System.out.println(str);
} //第二种遍历,把链表变为数组相关的内容进行遍历
String[] strArray=new String[list.size()];
list.toArray(strArray);
for(int i=0;i<strArray.length;i++) //这里也可以改写为foreach(String str:strArray)这种形式
{
System.out.println(strArray[i]);
} //第三种遍历 使用迭代器进行相关遍历 Iterator<String> ite=list.iterator();
while(ite.hasNext())
{
System.out.println(ite.next());
}
}
    2,LinkedList
        类似链表结果,查询慢,增删快,线程不安全。
        LinkedList遍历方式:
public static void main(String[] args) {

    List<String> list=new LinkedList<String>();
list.add("111");
list.add("222");
list.add("333");
//LinkedList遍历的第一种方式使用数组的方式
String[] strArray=new String[list.size()];
list.toArray(strArray);
for(String str:strArray)
{
System.out.println(str);
}
//LinkedList遍历的第二种方式
for(String str:list)
{
System.out.println(str);
}
}

四、Set接口

    Set中的元素无序,不重复。
    虽然Set中元素没有顺序,但是元素在set中的位置是有由该元素的HashCode决定的,其具体位置其实是固定的。
    Set集合中去重和Hashcode与equals方法之间相关。
    常见实现类有HashSet,LinedHashSet和TreeSet
    1,HashSet
        底层基于Hash算法进行存储元素,允许null,无序,不重复,元素位置固定
        HashSet是通过HashMap实现的。
        HashSet的几种遍历方法:

public static void main(String[] args) {
Set<String> set=new HashSet<String>();
set.add("111");
set.add("222");
set.add("333");
//遍历集合的第一种方法,使用数组的方法
String[] strArray=new String[set.size()];
strArray=set.toArray(strArray);
for(String str:strArray)//此处也可以使用for(int i=0;i<strArray.length;i++)
{
System.out.println(str);
}
//遍历集合的第二中方法,使用set集合直接遍历
for(String str:set)
{
System.out.println(str);
} //遍历集合的第三种方法,使用iterator迭代器的方法
Iterator<String> iterator=set.iterator();
while(iterator.hasNext())
{
System.out.println(iterator.next());
}
}
  2,LinkHashSet
        LinkHashSet不仅是Set接口的子接口而且还是上面HashSet接口的子接口。
        TreeSet是通过TreeMap实现的。
        LinkHashSet底层是基于LinkedHashMap来实现,和HashSet主要区别在于LinkedHashSet中存储的元素是在哈希算法的基础上增加了链式表的结构。
  3,TreeSet
        TreeSet底层算法基于红黑树,允许null,有序,不重复,元素位置固定
        TreeSet和HashSet的区别:
            1,HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的
            2, Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.
            3, hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.
                a. hashCode是用来计算hash值的,hash值是用来确定hash表索引的.
                b. hash表中的一个索引处存放的是一张链表, 所以还要通过equal方法循环比较链上的每一个对象才可以真正定位到键值对应的Entry.
                c. put时,如果hash表中没定位到,就在链表前加一个Entry,如果定位到了,则更换Entry中的value,并返回旧value
            4, 由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.
                a. Comparator可以在创建TreeMap时指定
                b. 如果创建时没有确定,那么就会使用key.compareTo()方法,这就要求key必须实现Comparable接口.
                c. TreeMap是使用Tree数据结构实现的,所以使用compare接口就可以完成定位了.
public static void main(String[] args) {
//String实体类中实现Comparable接口,所以在初始化TreeSet的时候,
//无需传入比较器
TreeSet<String> treeSet=new TreeSet<String>();
treeSet.add("d");
treeSet.add("c");
treeSet.add("b");
treeSet.add("a");
Iterator<String> iterator=treeSet.iterator();
while(iterator.hasNext())
{
System.out.println(iterator.next());
}
}

五、Map接口

    Map中的每个成员方法由一个关键字(key)和一个值(value)构成。
    常见实现类HashMap、TreeMap、LinkedHashMap、HashTable
    1,HashMap
        HashMap无序的、不可重复、查询快、null、非线程安全。
        HashMap实现了Map、CloneMap、Serializable三个接口,并且继承自AbstractMap类。
        HashMap基于hash数组实现,若key的hash值相同则使用链表方式进行保存。
        HashMap遍历方式
public static void main(String[] args) {
//方式1
Map map = new HashMap();
map.put("A", "1233");
map.put("B", "12334");
map.put("C", "12334");
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
System.out.println(entry.getKey() + "--" + entry.getValue());
}
//方式2效率高
iter = map.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
System.out.println(key + "--" + map.get(key));
}
}
  2,TreeMap
        TreeMap有序的、不可重复、遍历快、允许null、非线程安全。
        HashMap基于红黑树实现。
    3,LinkedHashMap
        LinkedHashMap有序的、不可重复、遍历快、允许null、非线程安全。
        LinkedHashMap输出顺序和输入顺序相同。
        LinkedHashMap继承hashMap,底层存储结果是Hashmap的table
    4,Hashtable
        Hashtable有序的、不可重复、不允许null、线程安全。

java_集合框架的更多相关文章

  1. JAVA_集合框架虐我千百遍,虐也是一种进步

    1.Collection和Collections区别: Collection是java的一个集合接口,集合类的顶级接口 Collections是一个包装类(工具类),不能被实例化(由于其构造函数设为私 ...

  2. 【Java_集合框架Set】HashSet、LinkedHashSet、TreeSet使用区别

    HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放: LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代: Tree ...

  3. Java_集合面试题

    Java_集合面试题 0.链表,队列和栈的区别? 链表是一种存储结构,指得是存储时候除了要存储数据元素之外,还要用数据元素一起的另外空间存储数据元素的关系. 队列和栈都是线性表,属于逻辑结构范畴,都是 ...

  4. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  5. 【目录】JUC集合框架目录

    JUC集合框架的目录整理如下: 1. [JUC]JUC集合框架综述 2. [JUC]JDK1.8源码分析之ConcurrentHashMap(一) 3. [JUC]JDK1.8源码分析之Concurr ...

  6. java面试题——集合框架

    先来看一下集合框架关系图 Collection FrameWork 如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └S ...

  7. Java使用实现面向对象编程:第七章集合框架的解读=>重中之重

    对于集合框架,是非常重要的知识,是程序员必须要知道的知识点. 但是我们为什么要引入集合框架呢? 我们之前用过数组存储数据,但是采用数组存储存在了很多的缺陷.而现在我们引用了集合框架,可以完全弥补了数组 ...

  8. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  9. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

随机推荐

  1. 《Effect Java》 归纳总结

    目录: 一.创建和销毁对象 (1 ~ 7) 二.对于所有对象都通用的方法 (8 ~ 12) 三.类和接口 (13 ~ 22) 四.泛型 (23 ~ 29) 五.枚举和注解 (30 ~ 37) 六.方法 ...

  2. 解决SenTestingKit/SenTestingKit.h: No such file or directory

    在一个iOS项目中引入了单元测试,感觉项目间的依赖关系有些乱,就建了一个新的Project,再把原来的.h和.m加进去,编译时竟然出现“SenTestingKit/SenTestingKit.h: N ...

  3. mysql 索引建立

    如何建立mysql索引? 创建索引原则 1.左前缀原则 : mysql索引匹配会从右匹配,到遇到( >  < between like)终止.如 我们建立索引(a,b,c,d), a = ...

  4. UIAlertViewController+TextField 输入框

    if (IOS8) { UIAlertController *alertController=[UIAlertController alertControllerWithTitle:CustomLoc ...

  5. 【转】python中常用第三方包os sys

    1. os 这个模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下 ...

  6. JS 添加千分位,测试可以使用

    JS 添加千分位,测试可以使用 <script language="javascript" type="text/javascript">funct ...

  7. xps13 关机充电 右边的usb口

    bios里设置了 usb powershare但关机的时候还是不能充电 度娘了一下,发现不解决问题,只能放狗了.果然谷歌里搜到答案,是windows的电源策略. I figured it out. A ...

  8. 用普通IO驱动LCD的控制方法-松瀚汇编源程序

    /*************************************** 本例程为IO直接驱动LCD的方法 以下是松瀚MCU汇编源程序 **************************** ...

  9. 提高你的Java代码质量吧:如果有必要,使用变长数组吧

    一.分析  Java中的数组是定长的,一旦经过初始化声明就不可改变长度,这在实际使用中非常不方便. 二.场景  比如要对班级学生的信息进行统计,因为我们不知道一个班级会有多少学生(随时都有可能会有学生 ...

  10. Android中Socket大文件断点上传

    原文:http://blog.csdn.net/shimiso/article/details/8529633 什么是Socket? 所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一 ...