java数据结构整理(二)

一、List接口,有序的Collection接口,能够精确地控制每个元素插入的位置,允许有相同的元素

1.链表,LinkedList实现了List接口,允许null元素,提供了get()、remove()、insert()方法,没有同步方法

[java] view plaincopy

  1. public void add() {
  2. LinkedList List = new LinkedList();
  3. List.add("link1");
  4. List.add("link2");
  5. List.add("link3");
  6. Iterator it = List.iterator();
  7. while (it.hasNext()) {
  8. System.out.println(it.next());
  9. }
  10. it.remove();
  11. Iterator it1 = List.iterator();
  12. for (int i = 0; i < List.size(); i++) {
  13. System.out.println(it1.next());
  14. }
  15. }

2.数组列表,ArrayList,可以动态变化容量的数组,非同步的

数组列表中存放的是Object类型,因此在数组列表中存放的对象类型,以其原型的父类代替,提取其中的元素时要进行类型转换

[java] view plaincopy

  1. public static void main(String[] args)
  2. {
  3. ArrayList al=new ArrayList();
  4. al.add("name");
  5. al.add("value");
  6. al.add("number");
  7. for(int i=0;i<al.size();i++)
  8. {
  9. System.out.println(al.get(i));
  10. }
  11. }

二、Set接口,不包含重复元素的Collection接口
1.散列集,HashSet,实现了Set接口,非线性同步
与链表和数组列表几乎类似,但在数据处理时,比使用链表进行数据处理花费时间更短,处理大数据时通常使用散列集

[java] view plaincopy

  1. public static void main(String[] args)
  2. {
  3. long time=0;
  4. HashSet hs=new HashSet();
  5. ArrayList al=new ArrayList();
  6. long starttime=System.currentTimeMillis();
  7. for(int i=0;i<10000;i++)
  8. {
  9. hs.add(new Integer(i));
  10. }
  11. System.out.println(System.currentTimeMillis()-starttime);
  12. for(int i=0;i<10000;i++)
  13. {
  14. al.add(new Integer(i));
  15. }
  16. System.out.println(System.currentTimeMillis()-starttime);
  17. }

2.树集,TreeSet,实现了Set接口,实现了排序功能,该集合中的元素默认按升序排列元素
使用树集数据结构的对象,需要实现Comparable接口,树集输出的数据都是经过排序的

三、Map接口,没有继承Collection接口,其提供key到value的映射,Map中不能包含相同的key,每个key只能映射一个value。
1.散列表类,HashTable,继承了Map接口,非空(non-null)的对象都可作为key或value,是同步的
添加数据:put(key,value);
取出数据:get(key);
特点:无序的,因此可以快速查找特定的元素

[java] view plaincopy

  1. public static void TableTest(){
  2. Hashtable ht = new Hashtable();
  3. ht.put("key1", "value1");
  4. ht.put("key2", "value2");
  5. String value1=(String)ht.get("key2");
  6. System.out.println(value1);
  7. }

构造函数:Hashtable(),初始容量11,负载因子0.75,即散列表中已经有75%的位置被放满,则进行再散列。
负载因子越高(越接近1),则内存使用率越高,元素的寻找时间越长,反之,则内存浪费越多,寻找时间越短
key的对象将通过计算散函数确定与之对应的value位置 ,因此key的对象需要实现hashCode()和equals()方法。
两个对象相同,则它们的hashCode必须相同;两个对象不同,则它们的hashCode不一定不同。
冲突:不同对象的hashCode相同,则称为冲突,冲突将导致操作散列表的时间开销增大。因此要同时复写equals()和hashCode()方法
2.散列映射类,HashMap,与HashTable类似,不是HashMap是非同步的,且允许null

[java] view plaincopy

  1. public static void Maptest(){
  2. Map<string string=""> map=new HashMap<string string="">();
  3. map.put("key1", "value1");
  4. map.put("key2", "value2");
  5. map.put("key3", "value3");
  6. for(Map.Entry<string string=""> entry:map.entrySet()){
  7. System.out.println(entry.getKey());
  8. System.out.println(entry.getValue());
  9. }
  10. String value1=(String)map.get("key1");
  11. System.out.println(value1);
  12. }
  13. </string></string></string>

3.树映像,TreeMap,输出的数据按照关键字排序了

【转】http://blog.csdn.net/hunterno4/article/details/9750577

时间: 2024-10-08 18:45:35

java数据结构整理(二)的相关文章

Java数据结构之二叉搜索树

Java数据结构之二叉搜索树 1.二叉搜索树组成 二叉搜索树又称为二叉排序树,它或者是一颗空树,或者是一颗具有如下特性的非空二叉树,需要满足一下三个条件: (1)若它的左子树非空,则左子树上所有结点的关键字均小于根结点的关键字: (2)若它的右子树非空,则右子树上所有结点的关键字均大于(可以等于)根结点的关键字. (3)左子树右子树本身又各是一颗二叉搜索树 在算法描述中,均以结点值的比较来代表其关键字的比较,因为若结点的值为类类型时,该类必须实现系统提供的java.lang.comparable

Java数据结构整理(一)

ava数据结构内容整理关键字: 数据结构 Collection:List.SetMap:HashMap.HashTable如何在它们之间选择一.Array , ArraysJava所有“存储及随机访问一连串对象”的做法,array是最有效率的一种.1. 效率高,但容量固定且无法动态改变.array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量.2.Java中有一个Arrays类,专门用来操作array.arrays中拥有一组static函数,equals(

数据结构整理(二) 树

一.前言 项目源码及其他声明等参见数据结构(一)线性结构篇. 二.相关概念 树作为一种应用广泛的一对多非线性数据结构,不仅有数据间的指向关系,还有层级关系,示例见图一.因树的结构比较复杂,为了简化操作及存储,我们一般将树转换为二叉树处理,因此本文主要讨论二叉树. 二叉树 二叉树是每个节点最多拥有两个子节点的树结构,若移除根节点则其余节点会被分成两个互不相交的子树,分别称为左子树和右子树.二叉树是有序树,左右子树有严格的次序,若颠倒则成为一棵不一样的二叉树. 满二叉树 满二叉树,顾名思义除叶子节点

自己动手实现java数据结构(二) 链表

1.链表介绍 前面我们已经介绍了向量,向量是基于数组进行数据存储的线性表.今天,要介绍的是线性表的另一种实现方式---链表. 链表和向量都是线性表,从使用者的角度上依然被视为一个线性的列表结构.但是,链表内部存储数据的方式却和向量大不相同:链表的核心是节点.节点存储"数据"的同时还维护着"关联节点的引用".要理解链表,首先必须理解链表的内部节点结构. 最简单的链表结构是单向链表,单向链表中的内部节点存储着数据(data)和其关联的下一个节点的引用(next). da

java:数据结构(二)栈的应用(进制转换)

说到进制转换,java已经封装了基本的方法,在竞赛中使用封装的方法自然能节省大量时间 另一位仁兄介绍的封装好的方法: https://blog.csdn.net/m0_37961948/article/details/80438113 如果不想看上面的全部,我总结了两条基本方放,记下就可以随意转化: 掌握这两个方法就可以实现任意进制的随便转化 (这个是针对竞赛,如果是需要学习底层,大家还在看api研究吧) 再看一个水题: 题目描述 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字

java面试题整理二(转灰灰+灰灰)

java 开发面试题小整理(二) 51.Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口? 答:可以继承其他类或实现其他接口,在Swing编程和Android开发中常用此方式来实现事件监听和回调. 52.内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制? 答:一个内部类对象可以访问创建它的外部类对象的成员,包括私有成员. 53.Java 中的final关键字有哪些用法? 答:(1)修饰类:表示该类不能被继承: (2)修饰方法:表示方法不能被重

Java数据结构和算法(二)树的基本操作

Java数据结构和算法(二)树的基本操作 一.树的遍历 二叉树遍历分为:前序遍历.中序遍历.后序遍历.即父结点的访问顺序 1.1 前序遍历 基本思想:先访问根结点,再先序遍历左子树,最后再先序遍历右子树即根-左-右.图中前序遍历结果是:1,2,4,5,7,8,3,6. // 递归实现前序遍历 public void preOrder() { System.out.printf("%s ", value); if (left != null) { left.preOrder1(); }

Java数据结构和算法(二)——数组

数组的用处是什么呢?--当你需要将30个数进行大小排列的时候,用数组这样的数据结构存储是个很好的选择,当你是一个班的班主任的时候,每次要记录那些学生的缺勤次数的时候,数组也是很有用.数组可以进行插入,删除,查找等. 1)创建和内存分配 Java中有两种数据类型,基本类型和对象类型,也有人称为引用类型,Java中把数组当成对象,创建数组时使用new操作符. int array[] = new int[10]; 既然是对象,那么array便是数组的一个引用,根据Java编程思想(一) -- 一切都是

Java数据结构和类有哪些?

Java数据结构和类有哪些?很多java初学者可能记不住或者记不全那么多,今天西安java培训小编为大家整理了Java数据结构和类的知识,希望对大家有所帮助. 一.Vector类 Vector类似于一个数组,但与数组相比在使用上有以下两个优点. 1.使用的时候无需声明上限,随着元素的增加,Vector的长度会自动 增加. 2.Vector提供额外的方法来增加.删除元素,比数组操作高效. Vector类有三个构造函数,分别如下: public Vector(); 该方法创建一个空的Vector.