Java集合—Collection篇
2015-08-28 11:26
417 查看
说到Collection集合不得不提的就是数组,Java中的数组为我们存储大量的数据提供了很大的方便,但
是数组也有很多缺点,不够灵活
1.数组被定义后长度就是固定的,但是实际开发中数据长度常常是不固定的
2.数组中只能存放同种类型的数据,但是要在一个数组中存放多种数据类型的数据就不行了
为了解决数组的弊端,集合就应声而出
一、Collection集合体系简介
集合是用来存放多个元素,由于底层数据结构的不同,Java就提供了多种集合类,而这些集合类都有共
性的东西,然后不断向上抽取这些公性,便形成了集合体系
Collection集合只能用来存放对象;长度不固定;可以存储多种类型对象(一般只存储一种)
框架
Collection
|--List
|--ArrayList
|--Vector
|--LinkedList
|--Set
|--HashSet
|--TreeSet
二、详解
Iterator是用于专门对Collection进行迭代的迭代器,详见Java的API
Collection
超类,存放着对数据增删改查的公共方法
Iterator用法:
//通过多态创建Collection对象c并且指向子类ArrayList //<String>这是泛型,相当于一个标签,指定此对象中存放的是String类型 Collection<String> c = new ArrayList<String>(); c.add("a"); c.add("b"); c.add("c"); //通过多态创建对象c的迭代器 Iterator<String> it = c.iterator(); //遍历c中的每一个元素并输出 while(it.hasNext()){ System.out.println(it.next()); }
Collection中的其他方法查API即可
1.List
List集合是有序的,元素可以不唯一
Iterator迭代器有也有专门迭代List的迭代器--->ListIterator(即Iterator子接口)
在用Iterator时有时会发生并发修改异常这时就可以用ListIterator来解决
1>ArrayList
数据结构:底层是数组
优点:查询快,增删慢
线程不是同步的,所以不安全,但是效率高
2>Vector(现在很少用)
数据结构:底层是数组结构
优点:查询快,增删慢
线程同步,所以比较安全,但是效率低
3>LinkedList
数据结构:底层是链表(首尾相接)
优点:查询慢,增删快
线程不同步,所以不安全,但是效率高
2.Set
Set集合无序(存储和取出的顺序不同),但是元素唯一
1>HashSet
底层是哈希表(哈希值是用来标示元素身份的,但不能保证唯一性)
特性:
a.不能保证数据的迭代顺序恒久不变(可能每次迭代出的顺序都是不一样的)
b.唯一性:
通过hashCode()值和equals()来保证元素唯一性(两个方法都要重写)
hashCode()值是否相同
不同:走equals()方法,判断元素具体内容是否相同
True:元素重复,不添加到集合
False:元素不重复,添加到集合
相同:元素重复不添加
2>TreeSet
底层是二叉树,通过树的节点进行存储和获取
可以根据构造方法不同对元素进行自然排序或者比较器排序,在排序的同时就能保证唯一性
a.自然排序
无参构造,要求对象所属的类实现Comparable接口(即CompareTo方法)
b.比较器排序
带参构造,要求参数是一个已经实现Comparator接口的对象(涉及到匿名内部类的使用)
Collections工具类对Collection集合类进行操作的工具类,提供了一系列的静态方法
三、小结
通过一篇博客总结一个阶段的学习,可以很好的梳理学过的知识点,也会有自己新的理解出现
有关于集合的东西有很多,需要不断的敲代码,达到熟练使用
相关文章推荐
- C#与.net高级编程 C#的多态介绍
- C#中面向对象编程机制之多态学习笔记
- Lua教程(七):数据结构详解
- C#中的多态深入理解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- C#中多态、重载、重写区别分析
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- 数据结构之Treap详解
- 浅析iterator与指针的区别
- JavaScript数据结构和算法之图和图算法
- c#基础学习之多态
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- 从汇编看c++中多态的应用
- javascript 面向对象全新理练之继承与多态
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java多态的使用注意事项
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java使用iterator遍历指定目录示例分享