`
hacker_zxf
  • 浏览: 148252 次
  • 性别: 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集合框架学习笔记

    本篇将详细探讨Java集合框架的基础知识,包括核心接口、类的层级结构以及Java 5引入的泛型特性。 首先,让我们了解一下`java.lang.Class`。`Class`类在Java中扮演着特殊的角色,它不仅是一个普通类,而且是用于获取...

    集合框架学习笔记

    这篇学习笔记将深入探讨Java集合框架的基础概念、主要类库以及常见应用场景。 首先,Java集合框架分为两种基本类型:List(列表)和Set(集)。List接口代表有序的集合,允许重复元素,如ArrayList和LinkedList;而...

    Java基础 学习笔记 Markdownr版

    2. 集合:在13集合.md中,详细讲解了Java集合框架,包括ArrayList、LinkedList、HashSet、HashMap等基本集合类的使用,以及List、Set、Map接口的特性。此外,还可能涉及泛型的概念,泛型(14泛型.md)提高了代码的...

    java 集合部分笔记

    【Java集合】 Java集合框架是Java编程语言中用于存储和操作对象的工具,它提供了多种数据结构,如列表、集、映射等,以适应不同的数据处理需求。集合类通常位于`java.util`包下,是Java程序员必备的知识点。 1. **...

    Java JDK 7学习笔记 PDF

    10. **集合改进**:对`Collections`类和`Arrays`类进行了扩展,增加了新的方法,如`copyOf`, `copyOfRange`等,方便对数组和集合的操作。 11. **编译器优化**:JDK 7的编译器Javac进行了升级,能够处理更复杂的语法...

    java学习笔记markdown

    3. **集合框架**:详细解释ArrayList、LinkedList、HashSet、HashMap等集合类的使用,以及List、Set、Map接口。集合框架是Java中用于存储和管理对象的重要工具。 4. **IO流**:介绍输入/输出流的概念,包括文件操作...

    Java 学习笔记Java学习笔记

    4. 集合框架:Java集合框架是用于存储和操作对象的工具,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)、Map(如HashMap和TreeMap)等接口及其实现类。它们提供了丰富的API用于添加、删除、查找...

    JAVA JDK6学习笔记

    Java JDK6学习笔记是针对Java编程语言初学者和进阶者的一份宝贵资源,它涵盖了Java的基础语法,并通过经典且易于理解的实例进行讲解。在本文中,我们将深入探讨Java JDK6中的关键概念和特性,以帮助你更好地理解和...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记是为Java初学者量身定制的一份宝贵资料,它涵盖了Java编程的基础概念、语法以及核心特性。这份PPT简体版旨在帮助读者快速掌握Java开发的基本技能,逐步成为一名合格的Java程序员。 Java JDK...

    JavaJDK6学习笔记(林信良著)

    《Java JDK6学习笔记》是由林信良编著的一本针对Java初学者和进阶者的学习资料,书中详细讲解了Java编程语言与JDK6版本的相关知识。这本笔记不仅包含传统的Java学习内容,还结合了作者独特的见解和实践经验,为读者...

    java JDK 8学习笔记

    Java JDK 8是Java开发工具集的一个重要版本,它的发布带来了许多创新特性和改进,极大地提升了开发者的工作效率。...这份"java JDK 8学习笔记"提供了清晰的目录结构,便于查阅和学习,是Java初学者的宝贵资源。

    Java JDK 5.0学习笔记

    本学习笔记旨在帮助新手全面理解并掌握Java 5.0的关键知识点。 一、泛型(Generics) Java 5.0引入了泛型,它允许在定义类、接口和方法时指定类型参数,从而实现类型安全的集合。泛型消除了强制类型转换的需要,...

    Java学习笔记——良葛格

    最后,笔记可能会涵盖一些实用的Java库,如集合框架(ArrayList、LinkedList、HashMap等)、IO库和JDBC(Java Database Connectivity)用于数据库交互。 总的来说,"良葛格的Java学习笔记"是一个全面而详尽的入门...

    Java入门学习笔记

    "Java入门第二季学习笔记"可能深入到更复杂的主题,如异常处理、集合框架、IO流和线程。异常处理是Java中处理错误的重要机制,使得程序更加健壮。集合框架包括ArrayList、LinkedList、HashSet、HashMap等数据结构,...

    Java基础尚硅谷宋红康学习笔记

    【Java基础】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年发布。Java以其“一次编写,到处运行”的特性...通过深入学习和实践,你可以不断提升自己的Java编程能力。

    JAVA学习笔记 林信良

    此外,《JAVA学习笔记》还涵盖了集合框架,包括ArrayList、LinkedList、HashSet、HashMap等各种集合类的使用,以及泛型、迭代器和流API的应用。这些内容对于处理数据和实现复杂算法至关重要。 对于多线程编程,书中...

    Java JDK 8学习笔记 带完整书签(不是页码书签哦)

    《Java JDK 8学习笔记》是由林信良教授在2015年3月出版的一本详尽解析Java SE 8新特性的书籍,由清华大学出版社发行。这本书共计643页,内容完整且清晰,包含目录和书签,便于读者高效地查阅和学习。 在Java JDK 8...

    Java学习笔记(源码)

    学习笔记会详细解析各种集合类的特性和使用场景。 5. **输入/输出(I/O)**:Java I/O流用于读写文件、网络通信等,包括文件流、字符流、对象流等。这部分内容会解释流的概念,以及如何使用BufferedReader、...

    Java学习笔记PPT

    Java集合框架是处理数据的重要工具,包括List、Set、Queue和Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。PPT可能会介绍它们的区别、用法以及如何根据需求选择合适的集合类型。 异常处理是...

Global site tag (gtag.js) - Google Analytics