随笔分类 -  【Java 开发】--- 提高篇

摘要:在Java中我们常使用Comparable接口来实现排序,其中compareTo是实现该接口方法。我们知道compareTo返回0表示两个对象相等,返回正数表示大于,返回负数表示小于。同时我们也知道equals也可以判断两个对象是否相等,那么他们两者之间是否存在关联关系呢? public class Student implements Comparable{ private Str... 阅读全文
posted @ 2014-08-06 18:17 chenssy 阅读(4014) 评论(1) 推荐(3) 编辑
摘要:我们经常使用subString方法来对String对象进行分割处理,同时我们也可以使用subList、subMap、subSet来对List、Map、Set进行分割处理,但是这个分割存在某些瑕疵。 一、subList返回仅仅只是一个视图 首先我们先看如下实例: public static void main(String[] args) { List list1 = ne... 阅读全文
posted @ 2014-08-06 10:48 chenssy 阅读(8939) 评论(0) 推荐(3) 编辑
摘要:在实际开发过程中我们经常使用asList讲数组转换为List,这个方法使用起来非常方便,但是asList方法存在几个缺陷: 一、避免使用基本数据类型数组转换为列表 使用8个基本类型数组转换为列表时会存在一个比较有味的缺陷。先看如下程序: public static void main(String[] args) { int[] ints = {1,2,3,4,5}; ... 阅读全文
posted @ 2014-08-04 19:11 chenssy 阅读(3483) 评论(0) 推荐(5) 编辑
摘要:集合是我们在Java编程中使用非常广泛的,它就像大海,海纳百川,像万能容器,盛装万物,而且这个大海,万能容器还可以无限变大(如果条件允许)。当这个海、容器的量变得非常大的时候,它的初始容量就会显得很重要了,因为挖海、扩容是需要消耗大量的人力物力财力的。同样的道理,Collection的初始容量也显得异常重要。所以:对于已知的情景,请为集合指定初始容量。 public static void... 阅读全文
posted @ 2014-07-30 12:51 chenssy 阅读(3746) 评论(8) 推荐(2) 编辑
摘要:在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用... 阅读全文
posted @ 2014-07-26 14:45 chenssy 阅读(7349) 评论(9) 推荐(3) 编辑
摘要:在前面LZ详细介绍了HashMap、HashTable、TreeMap的实现方法,从数据结构、实现原理、源码分析三个方面进行阐述,对这个三个类应该有了比较清晰的了解,下面LZ就Map做一个简单的总结。 推荐阅读: java提高篇(二三)—–HashMap java提高篇(二五)—–HashTable Java提高篇(二六)-----hashCode Java提高篇(二七)—–TreeMa... 阅读全文
posted @ 2014-07-17 09:40 chenssy 阅读(33186) 评论(2) 推荐(10) 编辑
摘要:前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList、LinkedList、Vector、Stack,通过这几个知识点可以对List接口有了比较深的了解了。只有通过归纳总结的知识才是你的知识。所以下面LZ就List接口做一个总结。推荐阅读: java提高篇(二一)-----... 阅读全文
posted @ 2014-07-12 23:11 chenssy 阅读(4600) 评论(2) 推荐(1) 编辑
摘要:在Java中Stack类表示后进先出(LIFO)的对象堆栈。栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的。每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出,如下: Stack通过五个操作对Vector进行扩展,允许将向量视为堆栈。这个五个操作如下: 操作 ... 阅读全文
posted @ 2014-07-09 12:43 chenssy 阅读(5256) 评论(0) 推荐(1) 编辑
摘要:迭代对于我们搞Java的来说绝对不陌生。我们常常使用JDK提供的迭代接口进行Java集合的迭代。 Iterator iterator = list.iterator(); while(iterator.hasNext()){ String string = iterator.next(); //do something ... 阅读全文
posted @ 2014-07-02 23:00 chenssy 阅读(22834) 评论(2) 推荐(20) 编辑
摘要:在java提高篇(二一)—–ArrayList、java提高篇(二二)—LinkedList,详细讲解了ArrayList、linkedList的原理和实现过程,对于List接口这里还介绍一个它的实现类Vector,Vector 类可以实现可增长的对象数组。 一、Vector简介 Vector可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。不过,Vector的大小是... 阅读全文
posted @ 2014-06-22 18:33 chenssy 阅读(5194) 评论(0) 推荐(1) 编辑
摘要:与HashSet是基于HashMap实现一样,TreeSet同样是基于TreeMap实现的。在《Java提高篇(二七)-----TreeMap》中LZ详细讲解了TreeMap实现机制,如果客官详情看了这篇博文或者多TreeMap有比较详细的了解,那么TreeSet的实现对您是喝口水那么简单。 一、TreeSet定义 我们知道TreeMap是一个有序的二叉树,那么同理TreeSet同样也是一个有... 阅读全文
posted @ 2014-06-06 14:57 chenssy 阅读(38492) 评论(0) 推荐(14) 编辑
摘要:TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致还是叫做TreeMap比较好。通过这篇博文你可以获得如下知识点: 1、红黑树的基本概念。 2、红... 阅读全文
posted @ 2014-05-22 22:23 chenssy 阅读(26585) 评论(14) 推荐(29) 编辑
摘要:在前面三篇博文中LZ讲解了(HashMap、HashSet、HashTable),在其中LZ不断地讲解他们的put和get方法,在这两个方法中计算key的hashCode应该是最重要也是最精华的部分,所以下面LZ揭开hashCode的“神秘”面纱。 hashCode的作用 要想了解一个方法的内在原理,我们首先需要明白它是干什么的,也就是这个方法的作用。在讲解数组时(java提高篇(十八)------数组),我们提到数组是java中效率最高的数据结构,但是“最高”是有前提的。第一我们需要知道所查询数据的所在位置。第二:如果我们进行迭代查找时,数据量一定要小,对于大... 阅读全文
posted @ 2014-04-08 08:47 chenssy 阅读(11874) 评论(2) 推荐(21) 编辑
摘要:在java中与有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的value值。一个是前面提到的HashMap,还有一个就是马上要讲解的HashTable。对于HashTable而言,它在很大程度上和HashMap的实现差不多,如果我们对HashMap比较了解的话,对HashTable的认知会提高很大的帮助。他们两者之间只存在几点的不同,这个后面会阐述。 一、定义 HashTable在Java中的定义如下: public... 阅读全文
posted @ 2014-04-03 21:23 chenssy 阅读(18937) 评论(9) 推荐(16) 编辑
摘要:在前篇博文中(java提高篇(二三)-----HashMap)详细讲解了HashMap的实现过程,对于HashSet而言,它是基于HashMap来实现的,底层采用HashMap来保存元素。所以如果对HashMap比较熟悉,那么HashSet是so easy!! 一、定义 public class HashSet extends AbstractSet imp... 阅读全文
posted @ 2014-03-24 21:09 chenssy 阅读(13226) 评论(2) 推荐(5) 编辑
摘要:HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。在HashMap中,key-value总是会当做一个整体来处理,系统会根据hash算法来来计算key-value的存储位置,我们总是可以通过key快速地存、取value。下... 阅读全文
posted @ 2014-01-15 21:29 chenssy 阅读(177488) 评论(27) 推荐(114) 编辑
摘要:一、概述 LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口链表的实现。基于链表实现的方式使得LinkedList在插入和删除时更优于ArrayList,而随机访问则比ArrayList逊色些。 LinkedList实现所有可选的列表操作,并允许所有的元素包括null。 除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。 此类实现 Deque 接口,为 阅读全文
posted @ 2014-01-10 21:50 chenssy 阅读(20659) 评论(8) 推荐(15) 编辑
摘要:一、ArrayList概述 ArrayList是实现List接口的动态数组,所谓动态就是它的大小是可变的。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。默认初始容量为10。随着ArrayLis... 阅读全文
posted @ 2013-12-30 21:22 chenssy 阅读(29444) 评论(3) 推荐(20) 编辑
摘要:在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList、HashMap、HashSet,也有不常用的Stack、Queue,有线程安全的Vector、HashTable,也有线程不安全的LinkedList、TreeMap等等! ... 阅读全文
posted @ 2013-12-28 12:47 chenssy 阅读(9112) 评论(2) 推荐(13) 编辑
摘要:前面一节主要介绍了数组的基本概念,对什么是数组稍微深入了一点点,在这篇博文中主要介绍数组的其他方面。三、性能?请优先考虑数组 在java中有很多方式来存储一系列数据,而且在操作上面比数组方便的多?但为什么我们还需要使用数组,而不是替代它呢?数组与其他种类的容器之间的区别有三个方面:效率、类型和保存基本类型的能力。在java中,数组是一种效率最高的存储和随机访问对象引用序列的方式。 在项目设计中数组使用的越来越少了,而且它确实是没有List、Set这些集合使用方便,但是在某些方面数组还是存在一些优势的,例如:速度,而且集合类的底层也都是通过数组来实现的。--------这是ArrayList的. 阅读全文
posted @ 2013-12-09 20:50 chenssy 阅读(8378) 评论(1) 推荐(12) 编辑