- 浏览: 243542 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
di1984HIT:
写的不错。
使用JDBC进行批处理 -
huyuran:
...
使用JDBC进行批处理 -
chenbo0928:
[url][/url][img][/img][*]引用 ...
Removing a detached instance -
mousepc:
gklovejava 写道Utility method to ...
eclipse中的get/set功能的一个bug -
gklovejava:
Utility method to take a string ...
eclipse中的get/set功能的一个bug
对于Set 和 List都是 接口 Collection 的子接口
1、Set 不允许重复,List允许重复
2、Set 没有顺序,List有顺序
另外:对于List当中,有没有重复元素的判断:是依据元素的 equals方法判断是否相等的。
对于排序来说,是根据元素实现了Comparable接口compareTo()方法来排序的。
ArrayList和LinkedList
首先看一下LinkedList和ArrayList的继承关系。
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Queue<E>, Cloneable, Serializable
两者都实现List接口,前者实现RandomAccess接口,后者实现Queue接口。
ArrayList其实是包装了一个数组 Object[],当实例化一个ArrayList时,一个数组也被实例化,当向ArrayList中添加对象是,数组的大小也相应的改变。这样就带来以下有缺点:
快速随即访问 你可以随即访问每个元素而不用考虑性能问题,通过调用get(i)方法来访问下标为i的数组元素。 向其中添加对象速度慢 当你创建数组是并不能确定其容量,所以当改变这个数组时就必须在内存中做很多事情。 操作其中对象的速度慢 当你要想数组中任意两个元素中间添加对象时,数组需要移动所有后面的对象。 LinkedList LinkedList是通过节点直接彼此连接来实现的。每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。当一个新节点插入时,只需要修改其中保持先后关系的节点的引用即可,当删除记录时也一样。这样就带来以下有缺点: 操作其中对象的速度快 只需要改变连接,新的节点可以在内存中的任何地方 不能随即访问 虽然存在get()方法,但是这个方法是通过遍历接点来定位的所以速度慢。 以上是原文中的观点,但是在回复中也有人反对: LinkedList有以下缺陷: 对象分配-每添加一项就分配一个对象 回收垃圾-对象分配的结果 随即访问慢-设计上的原因 添加删除慢-因为首先要找到位置 应该使用LinkedList的情况非常少。大多数的建议使使用LinkedList是错误的。 JDK的Stack就是用数组来实现的。 在多数时间里你并不是向List中间添加数据,而是向在结尾添加,这样的操作ArrayList表现的很好。 LinkedList在实现Queue时很有用。
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。 这一点我做了实验。在分别有200000条“记录”的ArrayList和LinkedList的首位插入20000条数据,LinkedList耗时约是ArrayList的20分之1。
4.查找操作indexOf,lastIndexOf,contains等,两者差不多。
5.随机查找指定节点的操作get,ArrayList速度要快于LinkedList.
这里只是理论上分析,事实上也不一定,ArrayList在末尾插入和删除数据的话,速度反而比LinkedList要快。我做过一个插入和删除200000条数据的试验。
插入:
LinkedList 578ms
ArrayList 437ms
删除:
LinkedList 31ms
ArrayList 16ms
HashMap,HashTable,TreeMap
HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。 集合框架”提供两种常规的Map实现:HashMap和TreeMap (TreeMap实现SortedMap接口)。在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。使用HashMap要求添加的键类明确定义了hashCode()和equals()的实现。 这个TreeMap没有调优选项,因为该树总处于平衡状态。 2、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?hash code是什么意思 hashcode是给一系列hash算法用的,比如hashtable。不同的对象应该有不同的hashcode,同一个对象应该有同样的hashcode 更正,不是同一个对象,而是相等的对象,应该有相同的hashcode hash算法是什么啊,作用? hash算法基本就是为了将一个对象和一个整数对应起来,不同的对象对应不同的整数。 3、String a="abc";String b=new String("abc");String c="abc"; System.out.println(a==b);f 4、a=0;b=0;
(x.equals(y) == true)那这个的话就是去比较它们所对应的整数?
不是。有一个equals()函数,和一个hashcode()函数
System.out.println(a==c);t
System.out.println(b==c);f
System.out.println(a.equals(b));
输出结果是什么?
为什么?
if((a=3)>0|(b=3)>0){}
if((a=3)>0||(b=3)>0){}分别说出a,b的值
刚开始看到HashTable,HashMap和TreeMap的时候比较晕,觉得作用差不多,但是到实际运用的时候又发现有许多差别的。于是自己搜索了一些相关资料来学习,以下就是我的学习沉淀。 java为数据结构中的映射定义了一个接口java.util.Map,而HashMap Hashtable和TreeMap就是它的实现类。Map是将键映射到值的对象,一个映射不能包含重复的键;每个键最多只能映射一个一个值。 Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力. Hashtable 与 HashMap类似,但是主要有6点不同。 1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。 2.HashTable不允许null值,key和value都不可以,HashMap允许null值,key和value都可以。HashMap允许key值只能由一个null值,因为hashmap如果key值相同,新的key, value将替代旧的。 3.HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。 4.HashTable使用Enumeration,HashMap使用Iterator。 5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。 6.哈希值的使用不同,HashTable直接使用对象的hashCode。 TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。 下面是HashTable,HashMap和TreeMap总结的一个经典例子。 package com.taobao.luxiaoting; import java.util.Map; import java.util.HashMap; import java.util.Set; import java.util.HashSet; import java.util.Iterator; import java.util.Hashtable; import java.util.TreeMap; class HashMaps { public static void main(String[] args) { Map map=new HashMap(); map.put(“a”, “aaa”); map.put(“b”, “bbb”); map.put(“c”, “ccc”); map.put(“d”, “ddd”); Iterator iterator = map.keySet().iterator(); while (iterator.hasNext()) { Object key = iterator.next(); System.out.println(“map.get(key) is :”+map.get(key)); } Hashtable tab=new Hashtable(); tab.put(“a”, “aaa”); tab.put(“b”, “bbb”); tab.put(“c”, “ccc”); tab.put(“d”, “ddd”); Iterator iterator_1 = tab.keySet().iterator(); while (iterator_1.hasNext()) { Object key = iterator_1.next(); System.out.println(“tab.get(key) is :”+tab.get(key)); } TreeMap tmp=new TreeMap(); tmp.put(“a”, “aaa”); tmp.put(“b”, “bbb”); tmp.put(“c”, “ccc”); tmp.put(“d”, “ddd”); Iterator iterator_2 = tmp.keySet().iterator(); while (iterator_2.hasNext()) { Object key = iterator_2.next(); System.out.println(“tmp.get(key) is :”+tmp.get(key)); } } } 输出结果如下图所示 这样就可以明显看出只有TreeMap得到的记录是排过序的。
发表评论
-
eclipse给main参数传参数
2012-03-30 09:56 963Run as->Run Configurations-& ... -
Convert Date To Calendar
2012-02-27 14:38 973import java.util.*; import ... -
Java核心API需要掌握的程度
2011-12-04 22:13 721Java核心API需要掌握的程度 Java ... -
JAVA中的反射机制详解
2011-10-30 11:00 1013http://java.ccidnet.com/art/353 ... -
Web文件的ContentType类型大全
2011-09-25 00:54 727转自:http://www.qihangnet.com/blo ... -
一个找jar包的网站
2011-09-15 18:10 9218http://www.docjar.com ... -
把new xxx()交给构造方法并不总是有效的
2011-08-30 20:36 846今天遇到一个错误,空指针。半天没找出问题。后来找到了。大部分的 ... -
java 关键字之valatile
2011-08-18 00:04 1057Volatile修饰的成员变量在每次被线程访问时,都强迫从 ... -
JDBC事务
2011-07-23 22:10 889事务的概念 事务指 ... -
JDBC调用存储过程
2011-07-23 22:00 744编写存储过程(参看mysql文档) 得到Ca ... -
获得数据库自动生成的主键
2011-07-23 21:55 820Connection conn = JdbcUtil. ... -
使用JDBC进行批处理
2011-07-23 21:48 22920l业务场景:当需要向数据库发送一批SQL语句执行时,应避免 ... -
使用JDBC处理二进制数据
2011-07-23 21:45 814l对于MySQL中的BLOB类型,可调用如下方法设置: ... -
使用JDBC处理大数据
2011-07-23 21:38 858l在实际开发中,程序需要把大文本或二进制数据保存到数据 ... -
Collection和ResultSet
2011-07-23 21:38 8801. Collection是数据库编程中最重要的一个对象 ... -
Unable to instantiate Action错误的解决
2011-05-09 15:50 1325转自:http://blog.csdn.net/icejade ... -
关于volatile变量
2011-04-22 10:43 768今天看到了一个单例模式代码: public class ... -
安装eclipse时出现的一个问题,以前一直用myeclipse的
2011-04-17 23:54 1140Incompatible JVM- Version 1.4.2 ... -
io读写文件内容例子
2011-04-04 10:23 936用来读取1.txt中的内容,添加到2.txt里面,请确保1.t ... -
JAVA中的反射机制
2011-04-01 13:37 578JAVA反射机制 JAVA反射机制是在运行状态中,对于任 ...
相关推荐
xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...
Java集合框架是Java编程语言中的一个核心组成部分,它为存储、管理和操作对象提供了一套统一的接口和类。本文将深入解析Java集合框架的各个方面,包括Collection、List、Set和Map,以及它们的相关实现和使用原理。 ...
### Java集合框架总结 #### 一、Java集合框架概述 Java集合框架是Java标准库的一部分,它提供了一系列的接口和类来存储和操作各种类型的对象集合。这些接口和类遵循一致的设计模式,使得开发人员可以方便地管理和...
### Java集合框架详解 #### 一、Java集合框架概述 Java集合框架是Java标准库的重要组成部分,它提供了存储和操作对象的各种数据结构。通过使用集合框架,开发人员可以轻松地管理不同类型的数据集,并且能够利用...
Java集合框架是Java编程语言中一个至关重要的组成部分,它提供了数据结构和算法的抽象,使得开发者可以方便地存储和管理各种类型的数据。本篇将详细探讨Java集合框架的基础知识,包括核心接口、类的层级结构以及Java...
集合是将多个元素组成一个单元的...Java集合框架,为我们提供了一套性能优良、使用方便的接口和类,我们不必再重新发明轮子,只需学会如何使用它们,就可以处理实际应用中出现的问题了Java集合框架位于java.util包中
Java集合框架是Java编程语言中的核心部分,它提供了一组高效、灵活的数据结构,使得开发者可以方便地存储和管理各种类型的数据。Java集合框架主要包括两大类:Collection和Map。 Collection接口是所有单值容器的父...
本文档为本人学习 java 集合框架期间的学习总结笔记,希望对新学习的朋友有所帮助和参考价值。本人java 开发时间不是太长,可能存在不完善或不对之处,欢迎指正!
6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6....
JAVA学习 Java集合框架.ppt
面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣...
根据提供的信息,我们可以总结并详细解释关于Java集合框架的一些关键知识点。这些知识点主要涉及Java集合框架中的各种数据结构,如List、Set、Map等,并深入探讨了它们在实际应用中的特性与用途。 ### Java集合框架...
《数据结构和Java集合框架》是清华大学出版社出版的一本经典教材,主要涵盖了计算机科学中的核心概念——数据结构以及Java编程语言中的集合框架。这本书通过深入浅出的方式,讲解了如何用Java实现各种常用的数据结构...
一个扑克游戏,用于Java集合框架练习一个扑克游戏,用于Java集合框架练习 一个扑克游戏,用于Java集合框架练习一个扑克游戏,用于Java集合框架练习 一个扑克游戏,用于Java集合框架练习一个扑克游戏,用于Java集合...
Java集合框架是Java编程语言中一个至关重要的组成部分,它为数据存储和操作提供了丰富的类库。泛型是Java 5引入的一项创新特性,极大地增强了集合框架的安全性和效率。本讲解将深入探讨这两个主题,以及与之相关的...
List set ArraryList Map java集合框架笔记 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用