java集合是一个重点和难点,如果我们刻意记住所有的用法与区别则是不太现实的,
之前一直在使用相关的集合类,但是没有仔细研究区别,现在来把平时使用比较频繁的一些集合
做一下分析和总结,目的就是以后在需要使用的时候能给找到适合的类。
      说到集合,先来看看数组,Array和集合相比,主要的问题是不能动态的改变长度,也不能删除元素,
在某些场景下不适合使用,而集合的话会灵活很多。
      集合中我们常用的3个接口是:List,Set和Map,而对应的实现类常用的有ArrayList,TreeSet和HashMap,
接下来就来总结一下这3个实现类的特点。
      Collection 是层次结构中的根接口,JDK 不提供此接口的任何直接实现:它提供更具体的
子接口(如 Set 和 List)实现。
       Set,无序的,一个不包含重复元素的 collection。更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,
并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。
       List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。
       Map和Collection接口没有关系,Map包含了key-value对,key唯一,value不唯一。
       接下来我们依次来说说最常用的ArrayList,TreeSet和HashMap。
1. ArrayList是List接口的大小可变数组的实现,是一个其容量能够动态增长的动态数组。它继承了AbstractList,
实现了List、RandomAccess, Cloneable, java.io.Serializable。
基本的ArrayList,适合在随机访问元素的场景,但是在List中间插入和移除元素时较慢。对于频繁插入和删除的地方,
适合使用LinkedList,基于链表的数据结构。ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。
同时,ArrayList的操作不是线程安全的!一般在单线程中才使用ArrayList。

下面看一个简单的例子,看看ArrayList
的使用:

import java.util.*;

public class ArraySort {
public static void main(String[] args) {
// 实例化一个List集合,用来存放int
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 100; i++) {// 执行100次for,获取随机整数,并放在集合中
list.add((int) (Math.random() * 1000));
//System.out.println(Math.random());
}
// 遍历
Integer value = null;
Iterator iter = list.iterator();
while (iter.hasNext()) {
value = (Integer)iter.next();
System.out.println(value);
}
// 排序
Collections.sort(list);
// 打印,查看结果
for (int i = 0; i < list.size(); i++) {
if (i % 15 == 0) {
System.out.println();
}
System.out.print(list.get(i) + " ");
}
}
}

具体方法的使用可以在用到的时候查询JDK API手册

2.Set是无序的,而TreeSet是有序的,TreeSet的本质是一个"有序的,并且没有重复元素"的集合,它是通过TreeMap实现的。

看一下具体的例子:

import java.util.*;

public class TreeSetTest {
public static void main(String args[]) {
// Create a tree set
Set ts = new TreeSet();
// Add elements to the tree set
ts.add("Cherry");
ts.add("Alinda");
ts.add("Bay");
ts.add("Floria");
ts.add("David");
System.out.println(ts);
}
}

输出:[Alinda, Bay, Cherry, David, Floria],默认按照字典顺序升序排列
此类保证排序后的 set 按照升序排列元素,根据使用的构造方法不同,可能会按照元素的自然顺序 进行排序(参见 Comparable),或按照在创建 set 时所提供的比较器进行排序。
3.HashMap基于哈希表的 Map 接口的实现。

先来看看API手册中的说法:HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。容量 是哈希表中桶的数量,
初始容量只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。
当哈希表中的条目数超出了加载因子与当前容量的乘积时,通过调用 rehash 方法将容量翻倍。
再来看一下具体到code:

import java.util.*;
/**
* @author
*
*/
public class MapTest {
public static void main(String[] args){
Random r = new Random();
Map<String,Integer> map=new HashMap<String,Integer>(); map.put("one",r.nextInt(100));
map.put("two",r.nextInt(100));
map.put("three",r.nextInt(100));
map.put("four",r.nextInt(100));
map.put("five",r.nextInt(100)); System.out.println("map:"+map); Integer integ = null;
String key = null;
Iterator iter = map.entrySet().iterator();
while(iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
// 获取key
key = (String)entry.getKey();
// 获取value
integ = (Integer)entry.getValue();
System.out.println("Key:"+key+" Value:"+integ);
}
} }

以上主要是java集合的典型的几个类的简单介绍,需要在具体的场景下来仔细研究差异。

java集合之ArrayList,TreeSet和HashMap分析的更多相关文章

  1. Java 集合系列 17 TreeSet

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  2. Java集合(5)一 HashMap与HashSet

    目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) Java集合(4)一 红黑树. ...

  3. java集合系列之LinkedList源码分析

    java集合系列之LinkedList源码分析 LinkedList数据结构简介 LinkedList底层是通过双端双向链表实现的,其基本数据结构如下,每一个节点类为Node对象,每个Node节点包含 ...

  4. Java集合框架之TreeSet浅析

    Java集合框架之TreeSet浅析 一.TreeSet综述: 1.1TreeSet简介: TreeSet是Java集合框架的重要成员,先来看看TreeSet在jdk1.8中的定义吧: public ...

  5. 从源码看Java集合之ArrayList

    Java集合之ArrayList - 吃透增删查改 从源码看初始化以及增删查改,学习ArrayList. 先来看下ArrayList定义的几个属性: private static final int ...

  6. Java集合干货——ArrayList源码分析

    ArrayList源码分析 前言 在之前的文章中我们提到过ArrayList,ArrayList可以说是每一个学java的人使用最多最熟练的集合了,但是知其然不知其所以然.关于ArrayList的具体 ...

  7. Java集合框架之TreeSet

    简述 TreeSet是基于TreeMap作为存储的可排序.可去重的有序集合 继承于AbstractSet,AbstractSet实现了equals和hashcode方法 实现了NavigableSet ...

  8. Java集合关于ArrayList

    ArrayList实现源码分析 2016-04-11 17:52 by 淮左, 207 阅读, 0 评论, 收藏, 编辑 本文将以以下几个问题来探讨ArrayList的源码实现1.ArrayList的 ...

  9. Java集合系列[4]----LinkedHashMap源码分析

    这篇文章我们开始分析LinkedHashMap的源码,LinkedHashMap继承了HashMap,也就是说LinkedHashMap是在HashMap的基础上扩展而来的,因此在看LinkedHas ...

随机推荐

  1. 机器学习算法与Python实践之(五)k均值聚类(k-means)

    机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学 ...

  2. The 13th tip of DB Query Analyzer, powerful processing EXCEL file

    The 13thtip of DB Query Analyzer, powerful processing EXCEL file MA Genfeng (Guangdong UnitollServic ...

  3. 如何使用firefox适用于javascript的debugger命令

    首先安装firebug,在firefox的扩展里搜索安装即可. 然后在页面中启用firebug中的脚本: 然后在网页某些位置加入debugger命令,比如如下页面代码: <!DOCTYPE ht ...

  4. 访问PHP文件时出现An error occurred.

    服务器配置ubuntu16,nginx,php5.6-fpm 我的问题是用户组没有权限导致出现访问PHP文件时An error occurred.,访问Html页面正常. 查看Nginx日志报错(路径 ...

  5. AbstractQueuedSynchronizer 原理分析 - Condition 实现原理

    1. 简介 Condition是一个接口,AbstractQueuedSynchronizer 中的ConditionObject内部类实现了这个接口.Condition声明了一组等待/通知的方法,这 ...

  6. git如何移除某文件夹的版本控制

    目录结构如下 project bin lib src ...... 执行如下的操作 git add . git commit -m "add bin/ lib/ src/" git ...

  7. Django ValidationError中的单下划线

    用惯pycharm,结果这个下划线无法自动找到.后来看文档发现其是翻译gettext的简化格式,import方式: from django.utils.translation import ugett ...

  8. AngularJS - 使用RequireJS还是Browserify?

    http://www.html-js.com/article/2126 AngularJS - 使用RequireJS还是Browserify? AngularJS之所以吸引了很多开发者的关注,很大一 ...

  9. TabLayout:另一种Tab的实现方式

    http://blog.csdn.NET/aigestudio/article/details/47155769 在5.0以前我们想要实现像网易新闻客户端那样的的Tab可以有很多种选择: 比如古老的T ...

  10. SQL Server Agent Job 多服务器管理