`
hacker_zxf
  • 浏览: 144631 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JAVA集合类学习(笔记)

阅读更多
1. 类图:

2. 集合类说明:
1) COLLECTION
一、 LIST
1> ARRAYLIST(线程不安全):    内部实现就是Object数组,使用了JAVA泛型,构造函数默认数组长度为10。
(1)  如果通过构造函数,来获取到新的arrayList对象,则数组长度计算方法:
// Allow 10% room for growth
int capacity = (int) Math.min((size*110L)/100, Integer.MAX_VALUE);

capacity变量就是目前数组的可用长度,设计上预留了10%用作后续的增长,所以每次
(2)  如果是add()方法加入,则新的可用长度计算方法如下:
int newCapacity = (oldCapacity * 3)/2 + 1;
(3) 通过clone()方法,则不会修改长度;

2>LINKEDLIST(线程不安全):  内部实现通过内部类Entry实现了对象链:
Class Entry{ 	
E element;
	    Entry<E> next;
	Entry<E> previous;
…
} 
  
2) VECTOR(线程安全):  內部的实现与arrayList有点类似,都用了数组,但是两者的区别如下:
(1) vector是线程同步的,所以它也是线程安全的,而arraylist是线程异步的,是不安全的。如果不考虑到线程的安全因素,一般用arraylist效率比较高。
(2) 如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而arraylist增长率为目前数组长度的50%.如过在集合中使用数据量比较大的数据,用vector有一定的优势。
(3) 如果查找一个指定位置的数据,vector和arraylist使用的时间是相同的,都是0(1),这个时候使用vector和arraylist都可以。而如果移动一个指定位置的数据花费的时间为0(n-i)n为总长度,这个时候就应该考虑到使用linklist,因为它移动一个指定位置的数据所花费的时间为0(1),而查询一个指定位置的数据时花费的时间为0(i)。
        Vector 在对elementData进行处理的方法,都加了synchronized,实现线程同
步。
1>STACK(线程安全): Stack继承自Vector,实现了栈的功能,同时是线程安全的。
二、 SET
1>HASHSET(线程不安全):
内部是用HashMap来实现的,所以它实现了键值的对应
private transient HashMap<E,Object> map;
看看它的添加方法:
 public boolean add(E o) {
	  return map.put(o, PRESENT)==null;
}
其中PRESENT变量是
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
    它是一个final且静态的变量,它用来在添加的时候,作为value出现,而map是key唯一的,所以在添加HashSet时,加入的对象都是作为 HashMap的Key保存,同时必定唯一。
2>TREESET
内部是用SortedMap来实现的,所以它实现了键值的对应
private transient SortedMap<E,Object> m;
实现方式与HashSet类似,但是它有新的方法

3. MAP
2) HASHMAP
    实现了键值对应关系,同事map中不会存在null值,当add时 KEY值为null,则会为该value添加默认的key值,
    /**
     * Value representing null keys inside tables.
     */
static final Object NULL_KEY = new Object();


但是我想如果同时插入两个key为空的VALUE值,那不是前一个值被冲掉了么。
实验了一下:
Map map = new HashMap();
map.put(null, 11111);
System.out.println("before:" + map.get(null));
map.put(null, 22222);
System.out.println("after:" + map.get(null));
果然打印结果为:
before:11111
after:22222

保存值的实现方案是,用内部类
transient Entry[] table; 

static class Entry<K,V> implements Map.Entry<K,V> {
        final K key;
        V value;
        final int hash;
Entry<K,V> next;

   …
}

     通过计算计算当前值的hashcode来确定值在table[]中的位置,然后保存。
2> SORTEDMAP:
    定义了排序的接口
3> TREEMAP
基本实现与hashMap差不多,只是其内部类实现方式不同,它是通过排序决定插入值的位置,同时也是通过对象数组实现。
    
  • 大小: 82.8 KB
分享到:
评论

相关推荐

    java集合类学习笔记.doc

    java集合类学习笔记.doc 学习java集合时留下的宝贵知识

    java笔记--集合类

    自己收集的java编程笔记,关于集合类的知识,很有用

    java学习笔记 达内笔记(经典)

    (二)面向对象技术总结.pdf (三)corejava高级特性总结 (四)接口学习总结 (五)异常和内部类 (六)集合框架学习总结 (七)GUI和AWT事件模型 (八)多线程学习总结 (九)输入输出流学习总结 (十)网络编程学习总结

    java collection

    java 集合类学习笔记 arraylist hashmap linkedList hashset

    java笔记.zip

    尚硅谷康师傅java学习笔记。 、2020-4-5 java学习笔记 2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 2020-4-6 java笔记 --多线程 2020-4-8 java笔记 String类 2020-4-9 java 比较器 2020-4-10 java笔记 ...

    java基础学习总结笔记

    Java基础常识、如何安装Java工具、Java语言的基础组成、Java面向对象、Java多线程、Java常用类、集合(重点)、IO流、GUI图形界面、网络编程、正则表达式、反射、注解、类加载器、动态代理等等,另外还包括银行管理...

    java学习笔记 初学者必读

    7.12.3. 五个最常用的集合类之间的区别和联系 7-33 7.12.4. 比较 7-35 7.13. 反射 7-37 8. 七•异常 8-37 8.1. 异常的基本概念 8-37 8.2. 捕获异常 8-38 8.3. 处理异常 8-38 8.4. 捕捉多个异常 8-38 8.5. finally ...

    java 学习教学大纲笔记

    java 学习教学大纲笔记1.熟练掌握Java语言开发环境的配置 2.掌握Java语言的基本语法与编码规范 3.熟练掌握Java基本语法 4.熟练掌握数组的使用 5.掌握面向对向思想 6.掌握Java常用类 7.熟练掌握Java语言中的异常处理...

    java面试笔试题库java学习笔记开发教程互联网公司面试资料大全合集.zip

    大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师测试题.doc 广州传智播客JavaEE工程师测试题(带答案的).doc 应聘时最漂亮的回答.docx 当面试官问「你有...

    Java集合(完整笔记)

    作者在学习过程中自己整理的Java集合笔记,包括开发中常见的单列集合(Collection)和双列集合(Map)以及开发中集合常用的接口,类,以及方法等,适合零基础小白,笔记详细,希望和大家一起学习的道路上我们可以...

    java学习笔记.rar

    Java基础部分笔记,封装多态继承模块类,异常和集合,IO类File类等学习笔记

    java summary(java笔记)

    学习java的一些笔记和个人总结 9、Collection 和 Collections的区别。  Collection是集合类的上级接口,继承与他的接口主要有Set 和List.。Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种...

    java笔记集合

    这里面包含很多以前学习java做的笔记,从java基础到框架,框架整合 ,jdbc,数据库连接,Servlet,jsp等之类的,非常适合初学者下载,学习java当中可以走少很多弯路。

    Java集合.xmind

    自己总结的java集合类的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者

    JAVA基础-集合类

    java基础,集合类基础,自己总结的笔记。

    JAVA入门实例代码及学习笔记

    我的JAVA入门实例代码和学习笔记,包括面向对象,接口,异常,集合类,CUI,事件监听,线程等JAVASE开发必备知识,实用性强!

    java Date类和集合

    这是关于javaDate日期类和集合类整理的笔记,上面记载了两个大知识点的相关操作方法

    JAVA学习精细笔记

    最详细的JAVA笔记,简练,详细。从Java概述,java程序的运行过程到接口,内部类,集合框架,线程等等,各种知识很全面

    数据结构与问题求解Java语言

    作者采用了独特的方法将数据结构分成说明和实现两部分,并充分利用了已有的数据结构库(Java集合类API)。本书分为四个部分:第一部分讨论适合大多数应用的集合类API的一个子集,并覆盖基本的算法分析技术、递归和...

    JAVA语言学习笔记4-9

    JAVA语言学习笔记4-9 主要讲JAVA的OOP(面向对象) 封装 继承 多态 以及JAVA中的异常处理机制等

Global site tag (gtag.js) - Google Analytics