java基本数据结构汇总

import java.util.Hashtable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Stack;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.Vector;

今天看了java系统提供的一些基本的集合,这里汇总一下,算是学习的一个总结。

他们所有的集合基本都是基于 collection接口 和 Map 接口

Collection

1.list (ArrayList ,LinkedList(频繁插入删除的时候用),Vector(线程安全),Stack(先进后出))

2.set (HashSet(无序,根据哈希值查找Entry),TreeSet(需要排序的时候用),LinkedHashSet(有序&&有序迭代的时候用) )

Map

1.TreeMap(需要排序的时候用)

2.HashMap(无序,根据key的哈希值查找Entry,concurrentHashMap(线程安全)),LinkedHashMap(有序&&有序迭代的时候用),HashTable(线程安全)

然后我们对具体的每个集合做一个简单的分析

ArrayList:数组集合,无容量限制,非线程安全

LinkedList:基于双向列表的机制,插入创建一个Entry对象,并切换前后元素引用,非线程安全

相对于ArrayList,其优势:add,remove较快,因为只需要操作前后元素,而ArrayList需要操作整个列表

get,set较慢以为ArrayList是有序的,LinkedList需要整个遍历

Vector:同ArrayList类似,最大区别是线程安全,还有自动扩充机制为2倍(ArrayList1.5倍)

Stack:继承自Vector,压栈,后进先出(push,pop。peek)

所有HashSet都是在加入的时候,先从对象中hashcode一个值,然后通过这个值加入到Set中

HashSet:基于HashMap实现,非线程安全,能存一个null(哈希表通过使用散列表的形式来存贮信息,集合内元素没有特定顺序,且随时会变)

TreeSet:(SortedSet)基于TreeMap实现 ,key需要实现comparator,实现排序

相对于HashSet:支持排序

LinkedHashSet:根据哈希值来判断元素存贮的位置,同时使用链表来维护元素之前的顺序,所以他是有序的

优势:迭代速度比HashSet好,插入删除查(因为需要维护前后元素的关系)

HashMap:根据数组的中hash码,查找Entry在另外一个数组中的位置,遍历用iterator

HashTable:线程安全,不允许null,便利用enumeration

TreeMap:能排序的map

LinkedHashMap:相对于HashMap,插入的时候有序,所以排序的时候

时间: 2024-08-25 23:03:50

java基本数据结构汇总的相关文章

Java常用英语汇总(面试必备)

Java常用英语汇总(面试必备) abstract (关键字)             抽象 ['.bstr.kt] access                            vt.访问,存取 ['.kses]‘(n.入口,使用权) algorithm                     n.算法 ['.lg.riem] annotation                     [java]代码注释 [.n.u'tei..n] anonymous                

沉淀,再出发:Java基础知识汇总

沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的语法,对象的定义,类.接口.继承.静态.动态.重载.覆盖这些基本的概念和使用方法,到稍微高级一点的多线程,文件读写,网络编程,GUI使用,再到之后的反射机制.序列化.与数据库的结合等高级一点的用法,最后将设计模式应用其中,产生了一个个新的概念,比如Spring.Spring MVC.Hibernat

Java编码问题汇总

转自 http://www.blogjava.net/zhangchao/archive/2011/05/26/351051.html Thanks Java编码问题汇总 工作中经常遇到java编码问题,由于缺乏研究,总是无法给出确切的答案,这个周末在网上查了一些资料,在此做些汇总. 问题一:在java中读取文件时应该采用什么编码? Java读取文件的方式总体可以分为两类:按字节读取和按字符读取.按字节读取就是采用InputStream.read()方法来读取字节,然后保存到一个byte[]数组

java神奇问题汇总

com.sun .xml.bind.v2.ContextFactory 类找不到的解决 用cxf+spring发布webservice,使用apache-cxf客户端方式调用接口访问服务器时,报javax.xml.bind.JAXBException: Provider com.sun.xml.bind.v2.ContextFactory not found 错误,异常堆栈信息如下: Caused by: javax.xml.bind.JAXBException: Provider com.su

java 基础数据结构

数据结构, 需要考虑两个方面: 1. 每个元素具体的存储方法 (java中是一个对象) 2. 元素之间的关系如何实现存储 (java中也是一个对象) 另外在java中, 已经可以把跟数据结构有关的一些方法写到一个类里了. 线性表 顺序表 c语言: 借助数组实现 #define INIT_SIZE 100; typedef struct { int elem[INIT_SIZE]; // 用来存储数组元素 int length; // 当前顺序表的长度 } SqList; // 元素之间的关系隐含

java项目——数据结构实验报告

java项目——数据结构总结报告 20135315  宋宸宁 实验要求 1.用java语言实现数据结构中的线性表.哈希表.树.图.队列.堆栈.排序查找算法的类. 2.设计集合框架,使用泛型实现各类. 3.API的编写,并导出. 4.使用TDD模式,对程序进行测试,利用TestSuite将各测试类整合到一起. 5.与小组成员实现代码的整合. 实验设计过程 首先自学集合框架章节的内容,初步设计相关的类. 根据数据结构课本的章节分类,实验各数据结构类. 在类的编写过程中,经过老师的指导,我准备使用泛型

java实现数据结构-线性表-顺序表,实现插入,查找,删除,合并功能

package 顺序表; import java.util.ArrayList; import java.util.Scanner; public class OrderList { /** * @param args * @author 刘雁冰 * @2015-1-31 21:00 */ /* * (以下所谓"位置"不是从0开始的数组下标表示法,而是从1开始的表示法.) * (如12,13,14,15,16数据中,位置2上的数据即是13) * * 利用JAVA实现数据结构-线性表-顺

SAE Java开发问题汇总

转自:http://binary.duapp.com/2012/10/275.html 1.sae上传了war后不报错,却出现一片空白: 原因:上传war包不能包含servlet-api和xmlsec相关jar包 详情参看:http://sae.sina.com.cn/?m=devcenter&catId=233&content_id=292 2.session无效? 原因:如果要使用分布式session功能,需在war包中的web.xml中增加一个元素<distributable/

JAVA 犯错汇总

ResultSet-->next() //伪代码 ResultSet rs = null; rs1 = stmt.executeQuery(); //if(!rs.next()){ //这里就是坑我代码 // return false; //} while(rs.next()) { //rs.next()这个方法坑了我,让我总是得不到第一条数据 执行一次,往下走一回,我靠,不带这么坑的 } JAVA 犯错汇总