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. Linux系统下常用的快捷键

    快捷键 ctrl +  shift + '+'   将当前的终端放大 ctrl +  '-'           将当前的终端放小 ctrl +  l             清屏 ctrl +  u ...

  2. React Native Android开发环境配置

    近些年,Web前端甚是火爆,火爆程度堪比我毕业时的移动端开发一般.随着JavaScript的火爆,移动端也不安分了起来,ReactNative就异军突起了,几乎要做到"一次学习,四处开发&q ...

  3. iBATIS 深入分析

    深入分析 iBATIS 框架之系统架构与映射原理 分类: IBATIS2010-11-24 03:32 547人阅读 评论(1) 收藏 举报 ibatis框架sql数据库jdbcjava 本文转至ht ...

  4. 解密for循环工作机制之迭代器,以及生成器、三元表达式与列表解析、解压序列

    本节内容 1.迭代器协议与for循环 2.三元表达式 3.解压序列 4.列表解析 5.生成器 迭代器协议与for循环 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中下一项, ...

  5. 区块链共识机制(POW、POS、DPOS等)的优缺点

    一.POW:工作量证明机制 基本原理: 第一代共识机制,比特币的基础.理解起来,很简单,就是“按劳取酬”,你付出多少工作量,就会获得多少报酬(比特币等加密货币).在网络世界里,这里的劳动就是你为网络提 ...

  6. 8 个最好的 jQuery 树形 Tree 插件

    由于其拥有庞大,实用的插件库,使得 jQuery 变得越来越流行.今天将介绍一些最好的 jQuery 树形视图插件,具有扩展和可折叠的树视图.这些都是轻量级的,灵活的 jQuery 插件,它将一个无序 ...

  7. php添加日志文件

    记录一下. 有时候写测试代码的时候,不习惯直接在屏幕上输出反馈,那么可以配置日志文件,把需要输出的内容追加到日志文件里面,就很方便. Php自带日志系统,可以参考网上的博客配置. 我要说的是,如果你的 ...

  8. 深入理解javascript 匿名函数和闭包

    代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })();  半年前初次接触jQuery的时候,我也像其 ...

  9. 条件随机场CRF(三) 模型学习与维特比算法解码

    条件随机场CRF(一)从随机场到线性链条件随机场 条件随机场CRF(二) 前向后向算法评估标记序列概率 条件随机场CRF(三) 模型学习与维特比算法解码 在CRF系列的前两篇,我们总结了CRF的模型基 ...

  10. [Arxiv1706] Few-Example Object Detection with Model Communication 论文笔记

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px "Helvetica Neue"; color: #042eee } p. ...