- 浏览: 930688 次
- 性别:
- 来自: 魔都
文章分类
- 全部博客 (745)
- MultiThread (19)
- My Plan (118)
- JavaBasic (61)
- MyInterview (104)
- InternetTechnique (5)
- ProjectConclusion (1)
- Maven (5)
- MogoDb (5)
- Hadoop (11)
- Memcached (6)
- TechniqueCollect (1)
- Ibaits (1)
- Android (34)
- ItLife (40)
- Tree (2)
- ProjectArchitect (7)
- Open Source (3)
- liunx (5)
- socket (8)
- Spring (27)
- DesginPattern (35)
- WebBasic (13)
- English (13)
- structs (1)
- structs2 (2)
- Oracle (17)
- Hibernate (2)
- JavaScript (4)
- Jdbc (1)
- Jvm (15)
- Ibatis (1)
- DataStructures (13)
- Https/Socket/Tcp/Ip (3)
- Linux (4)
- Webservice (7)
- Io (2)
- Svn (1)
- Css (1)
- Ajax (1)
- ExtJs (1)
- UML (2)
- DataBase (6)
- BankTechnique (3)
- SpringMvc (3)
- Nio (3)
- Load Balancing/Cluster (3)
- Tools (1)
- javaPerformanceOptimization (8)
- Lucene(SEO) (1)
- My Think (80)
- NodeJs (1)
- Quartz (1)
- Distributed-java (1)
- MySql (7)
- Project (4)
- junit (4)
- framework (1)
- enCache (1)
- git (2)
- SCJP (1)
- sd (1)
最新评论
-
lkjxshi:
你都这水平了还考这个证干嘛
SCJP 认证考试指南 -
钟逸华:
问的真多
百度java开发面试题(转) -
zuimeitulip:
觉得我就是这样的,从小阅读量就很少,导致现在的读的速度非常慢, ...
让读书成为一种习惯 -
DDT_123456:
我觉得你是不符合要求。问你hashmap的那个问题,你那样回答 ...
阿里面试2(转) -
jingjing0907:
刚刚写了很多读过此博客的感受,竟然没有发上去,以为我注册账号还 ...
让读书成为一种习惯
1.冒泡排序
2.arraylist存放的是对象的引用,不是对象本身,在java里面除了8中基本类型(int ,double ,long ,short,char,byte,boolean,float)
3.你做相似的工作又多种选择的时候,可以考虑用抽象工厂
这个抽象工厂运用他的场景:
1。你有两台单色打印机,一台黑白墨的,一台彩墨的。
2。你有两种文件要打,一种讲演搞,一种图片
3.ArrayList底层采用数组实现,当使用不带参数的构造方法生成ArrayList对象时,
调用arraylist默认构造函数时,实际上会在底层生成一个长度为10的Object类型的数组.
4.如果增加的元素个数超过10个,那么ArrayList底层会新生成一个数组,长度为原数组的1.5倍+1,然后将原数组的内容复制到新数组中,并且后续增加的内容都
hi放到新数组中,当新数组无法容纳增加的元素时,重复该过程.
5.arraylist底层采用数组实现,linkedList底层采用双向链表实现,当执行插入或者删除时,linkedlist好
执行收索时arraylist好(下标)
6.集合添加时用hascode(字符相等),equals判断。(重写hascode跟equals方法)
HashSet 首先判断hascode是否相同不同则加进去,否则判断equals方法是否返回true,若为false则不加进去。
7.HashSet(按散列放到什么位置不是按顺序)底层是用HashMap实现的,当使用add方法将对象添加到set当中时,实际上是将该对象作为底层所维护的Map
对象的key,而value则都是同一个对象Object对象(该对象用不上)。
8.hashmap(数组+链表)底层维护一个数组(hash碰撞),我一对们向HashMap中所放置的对象实际上是储存在该数组当中.
9.当向HashMap中put一对键值时,他会根据key的hashcode值计算出一个位置,该位置就是此对象准备往数组存放的位置。
如果该位置没有对象存在,直接把该对象放进数组当中,如果该位置已经有对象存在了,
则顺着次存在的对象的链表开始寻找(Entry类有一个Entry类型的next成员变量,指向了该对象的下一个对象),
如果此链上有对象的话,再去使用equlas方法进行比较,
如果对此链表上的某个对象的equals方法比较为false,则将该对象放到数组当中,然后将数组当中的该位置以前存在的那个对象链表到此对象的后面。
hashmap get
public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry<k> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash &amp;&amp; ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}
hashmap put
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry<k> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash &amp;&amp; ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
10.java中底层只有数组,链表,数组管理多个对象。</k></k>
Hashset跟Treeset的区别
1.HashSet 是哈希表实现的,无序的结合,表现为检索(contains)的时间复杂度是 o(0)
TreeSet 是红黑树实现的,排序的集合
先看看源码:
public class TreeSet
extends AbstractSet
implements SortedSet, Cloneable, java.io.Serializable
public class HashSet
extends AbstractSet
implements Set, Cloneable, java.io.Serializable
其中SortedSet中组合了一个:Comparator super E&gt; comparator();
2.TreeSet与HashSet最大区别在于排序
3.Treeset中的数据是自动排好序的,不允许放入null值
2.HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束
3.HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,
hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例
今天有人问这个,发现自己只是大概理解而且只会用了。该忘的竟然忘得差不多了,翻翻书复习下。
对于处理一列数据项,Java提供了两个类ArrayList和LinkedList。
ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更像数组、
但LinkedList的内部实现是基于一组连接的记录,所以,它更像一个链表结构,所以,它们在性能上有很大的差别。
在ArrayList的前面或中间插入数据时,必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;
而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
如果在编程中,两种情形交替出现,这时,可以考虑使用List这样的通用接口,而不用关心具体的实现,在具体的情形下,它的性能由具体的实现来保证。
ArrayList的查询效率比较高,增删动作的效率比较差,适用于查询比较频繁,增删动作较少的元素管理的集合。LinkedList的查询效率低,但是增删效率很高。适用于增删动作的比较频繁,查询次数较少的元素管理集合。
ArrayList,LinkedList都是线程不安全的。
StringBuilder、StringBuffer和String三者的联系和区别
1. String 类
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。
String a = "a"; //假设a指向地址0x0001
a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。
因此String的操作都是改变赋值地址而不是改变值操作。
2. StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。 每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
StringBuffer buf=new StringBuffer(); //分配长16字节的字符缓冲区
StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区
StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。
3.StringBuffer
StringBuffer和StringBuilder类功能基本相似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。对于经常要改变值的字符串应该使用StringBuffer和StringBuilder类。
4.线程安全
StringBuffer 线程安全
StringBuilder 线程不安全
5.速度
一般情况下,速度从快到慢:StringBuilder>StringBuffer>String,这种比较是相对的,不是绝对的。
6.总结
(1).如果要操作少量的数据用 = String
(2).单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
(3).多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
2.arraylist存放的是对象的引用,不是对象本身,在java里面除了8中基本类型(int ,double ,long ,short,char,byte,boolean,float)
3.你做相似的工作又多种选择的时候,可以考虑用抽象工厂
这个抽象工厂运用他的场景:
1。你有两台单色打印机,一台黑白墨的,一台彩墨的。
2。你有两种文件要打,一种讲演搞,一种图片
3.ArrayList底层采用数组实现,当使用不带参数的构造方法生成ArrayList对象时,
调用arraylist默认构造函数时,实际上会在底层生成一个长度为10的Object类型的数组.
4.如果增加的元素个数超过10个,那么ArrayList底层会新生成一个数组,长度为原数组的1.5倍+1,然后将原数组的内容复制到新数组中,并且后续增加的内容都
hi放到新数组中,当新数组无法容纳增加的元素时,重复该过程.
5.arraylist底层采用数组实现,linkedList底层采用双向链表实现,当执行插入或者删除时,linkedlist好
执行收索时arraylist好(下标)
6.集合添加时用hascode(字符相等),equals判断。(重写hascode跟equals方法)
HashSet 首先判断hascode是否相同不同则加进去,否则判断equals方法是否返回true,若为false则不加进去。
7.HashSet(按散列放到什么位置不是按顺序)底层是用HashMap实现的,当使用add方法将对象添加到set当中时,实际上是将该对象作为底层所维护的Map
对象的key,而value则都是同一个对象Object对象(该对象用不上)。
8.hashmap(数组+链表)底层维护一个数组(hash碰撞),我一对们向HashMap中所放置的对象实际上是储存在该数组当中.
9.当向HashMap中put一对键值时,他会根据key的hashcode值计算出一个位置,该位置就是此对象准备往数组存放的位置。
如果该位置没有对象存在,直接把该对象放进数组当中,如果该位置已经有对象存在了,
则顺着次存在的对象的链表开始寻找(Entry类有一个Entry类型的next成员变量,指向了该对象的下一个对象),
如果此链上有对象的话,再去使用equlas方法进行比较,
如果对此链表上的某个对象的equals方法比较为false,则将该对象放到数组当中,然后将数组当中的该位置以前存在的那个对象链表到此对象的后面。
hashmap get
public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry<k> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash &amp;&amp; ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}
hashmap put
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry<k> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash &amp;&amp; ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
10.java中底层只有数组,链表,数组管理多个对象。</k></k>
Hashset跟Treeset的区别
1.HashSet 是哈希表实现的,无序的结合,表现为检索(contains)的时间复杂度是 o(0)
TreeSet 是红黑树实现的,排序的集合
先看看源码:
public class TreeSet
extends AbstractSet
implements SortedSet, Cloneable, java.io.Serializable
public class HashSet
extends AbstractSet
implements Set, Cloneable, java.io.Serializable
其中SortedSet中组合了一个:Comparator super E&gt; comparator();
2.TreeSet与HashSet最大区别在于排序
3.Treeset中的数据是自动排好序的,不允许放入null值
2.HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束
3.HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,
hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例
今天有人问这个,发现自己只是大概理解而且只会用了。该忘的竟然忘得差不多了,翻翻书复习下。
对于处理一列数据项,Java提供了两个类ArrayList和LinkedList。
ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更像数组、
但LinkedList的内部实现是基于一组连接的记录,所以,它更像一个链表结构,所以,它们在性能上有很大的差别。
在ArrayList的前面或中间插入数据时,必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;
而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
如果在编程中,两种情形交替出现,这时,可以考虑使用List这样的通用接口,而不用关心具体的实现,在具体的情形下,它的性能由具体的实现来保证。
ArrayList的查询效率比较高,增删动作的效率比较差,适用于查询比较频繁,增删动作较少的元素管理的集合。LinkedList的查询效率低,但是增删效率很高。适用于增删动作的比较频繁,查询次数较少的元素管理集合。
ArrayList,LinkedList都是线程不安全的。
StringBuilder、StringBuffer和String三者的联系和区别
1. String 类
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。
String a = "a"; //假设a指向地址0x0001
a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。
因此String的操作都是改变赋值地址而不是改变值操作。
2. StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。 每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
StringBuffer buf=new StringBuffer(); //分配长16字节的字符缓冲区
StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区
StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。
3.StringBuffer
StringBuffer和StringBuilder类功能基本相似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。对于经常要改变值的字符串应该使用StringBuffer和StringBuilder类。
4.线程安全
StringBuffer 线程安全
StringBuilder 线程不安全
5.速度
一般情况下,速度从快到慢:StringBuilder>StringBuffer>String,这种比较是相对的,不是绝对的。
6.总结
(1).如果要操作少量的数据用 = String
(2).单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
(3).多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
发表评论
-
java的8种排序
2013-03-19 22:51 926url:http://www.iteye.com/topic ... -
排序算法分析之冒泡排序
2012-05-25 11:27 1500冒泡排序(Bubble Sort)是一种简单的排序算法。它重复 ... -
想对集合说的一些话
2012-04-24 00:11 972Java的集合很有用,自己看过很多了,但是总是感觉很模糊,用起 ... -
数据结构(c语言)
2012-04-19 21:29 11051. 经典算法 单链表:遍 ... -
java中数据结构二分查法
2012-04-20 00:19 1287数据结构和算法是一个程序的灵魂,优化程序的主要手段。在查询里, ... -
插入排序
2012-04-21 21:16 893插入排序无非就是在原来已经排好序的基础上再一个个添加元素,每次 ... -
java经典算法40题
2012-04-14 12:16 1665排序算法:http://www.cnblogs.com/mor ... -
数据结构与算法基础
2012-03-29 09:31 11851.arraylist(底层数组实现) ... -
2012/3/27----归并排序
2012-03-27 13:58 967通过使用分治算法的思想来对数组进行排序(这里叫做归并排序),分 ... -
算法学习一之常见的七大排序算法
2012-03-19 09:40 1442算法之排序 十三个经典 ... -
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
2012-03-18 18:06 1423先推荐一篇关于排序算法的文章:http://www.cppbl ... -
快速排序算法原理与实现/交换排序
2012-03-19 09:45 1484快速排序的大致思想为取到中间位置的元素,其他元素和其一一比较, ...
相关推荐
这篇集合总结一共包括十二节,介绍了一些接口和实现类的底层源码以及基本的增加、删除元素等的操作(包括List、Map、Set接口、ArrayList、Vector、LinkedList、HashSet、TreeSet、HashMap、TreeMap等实现类)。...
ArrayList HashSet HashMap LinkedList 遍历方法 传统遍历方法 for(int i=0;i<list.size();i++) { String str = list.get(i); ... } 内置迭代器 for (String str : list) { ... } 显式迭代器 Iterator it = ...
掌握List集合、Set集合、Map集合的使用以及Iterator迭代器和foreach循环的使用 了解常用的集合类 熟悉泛型的使用
1) 掌握Java集合框架的概念以及几种具体实现:ArrayList, LinkedList, HashSet, TreeSet, PriorityQueue; 2) 掌握Java集合框架的映射的概念以及映射的两种基本实现:HashMap,TreeMap; 3)掌握枚举类型以及枚举集...
java jdk1.8 源码 Java-source-reading 缓慢更新一些个人学习java相关源码过程中的笔记,在这里你将不可避免地看到以下情况: 个别不懂/没想好的地方留空待补全 ...ArrayList LinkedList HashMap HashSet LinkedHashMap
java 集合类学习笔记 arraylist hashmap linkedList hashset
Collections 源码 java Java Java的ArrayList、LinkedList、HashMap、TreeMap、LinkedHashMap、HashSet、TreeSet相关源码分析,及相关问题和应用总结。
// 常用的list接口的实现类有ArrayList和LinkedList // 学习map对象容器的使用 // map对象容器里面储存的元素是(key,value)形式的键值对,比如(a,1)(b,20)(c,55) // key不可以重复,value可以重复 // 常用的map接口...
java所有集合类底层源码解析汇总,包括ArrayList、HashMap、HashSet、LinkedList、TreeMap、HashSet、ConcurrentHashMap等集合框架的底层实现源码大白话解读。
java集合在日常开发中经常用到,对基础的掌握尤其重要,其中List,Set,Map的作用以及使用的场景和分类描述,其中Arraylist 与 LinkedList 区别,HashSet与TreeSet与LinkedHashSet对⽐,LinkedHashMap和HashMap,...
LinkedList HashMap HashSet TreeMap TreeSet StringBulider 线程安全集合: Vector HashTable Properties 集合线程安全与解决方案 ArrayList线程安全问题 package ...
ArrayList/Vector LinkedList HashMap HashSet LinkedHashMap Java 多线程 多线程中的常见问题 synchronize 关键字原理 多线程的三大核心 对锁的一些认知 ReentrantLock 实现原理 ConcurrentHashMap 的实现原理 ...
ArrayList/Vector LinkedList HashMap HashSet LinkedHashMap Java 多线程 多线程中的常见问题 synchronize 关键字原理 多线程的三大核心 对锁的一些认知 ReentrantLock 实现原理 ConcurrentHashMap 的实现原理 ...
ArrayList LinkedList Set HashSet TreeSet Map HashMap 泛型 Iterator 线程 反射 虚拟机 Java8 新特性 Java EE 源码 JUnit SpringSide Jive 论坛 框架 J2EE Development without EJB SpringMVC 视频 看透SpringMVC ...
Java集合框架:这部分问题关注ArrayList、LinkedList、HashMap、HashSet等集合类的特性和使用。例如,比较ArrayList和LinkedList的优缺点;解释HashMap的工作原理和如何处理哈希冲突;讨论如何选择合适的集合类来...
ArrayList LinkedList CopyOnWriteArrayList Vector Map源码系列 HashMap LinkedHashMap ConcurrentHashMap TreeMap Hashtable Set源码系列 HashSet LinkedHashSet TreeSet HashSet Concurrent源码系列 待完善 JVM...
就是一些通用java集合知识点整理,ArrayList LinkedList,HashMap,HashTable ,ConcurrentHashMap,HashSet,LinkedHashSet类通过线程安全否: 底层: 初始值: 扩容 : 区别(对比优势) 图解
HashMap LinkedList ArrayList HashSet SortedSet Socket Thread OutputStream InputStream 指令支持 通用指令 keys pattern 支持正则匹配 expire key mill del key [key...] string set key value get key list ...