您的位置:首页 > 编程语言 > Java开发

Java中的容器

2015-09-07 22:38 423 查看
容器在程序中具有最重要的角色,具有存储数据和传递数据的功能,对容器赋值正是对内存中一个地址单元赋值。我们通过容器可以对存储的或是传递的数据进行操作。这也是Java面向对象思想的一种体现,就如生活中的我们的用一些袋子、包裹去存储打包物品,满足我们对物品操作,下面笔者就谈谈Java中的一些容器。

1,变量

变量就如同我们生活中的小袋子,把我们输入的字符串或数值装起来,用的时候再取出来。变量可以保存临时数据,变量还可以在函数中或者过程中传递参数(在函数过程中要处理的数据对象)。

2,数组:数组是在内存开辟的一块连续区域

数组也是一种容器,可以存放同一种数据类型(可存基本数据类型也可以存引用数据类型)。数组中元素都有索引,索引从0开始到数组的长度-1结束,数组的元素都是有序存放的。通过索引可以对数组中的数据一般可以进行增删、查找、赋值操作,在使用数组前必须指定数组数组容量,例如创建一个整形数组:int [] arr = new int [4];需要指定其空间大小为4,一旦数组容量确定,容量大小就不可以改变了,我们可以通过数组名.length来获得数组的容量(长度)。在存放数据时需要指定存放的位置即数据索引,如给数组arr[0]
= 12;在数组的0角标位置上存放一个int数值12。下图为数组在内存中图解

给你介绍数组中两个常用方法:

1)二分查找法:static void binarySearch(int [] a,int key);

2)static void sort(int [] arr); 对int类型数组排序的方法



3.StringBuffer(StringBuilder)

存储字符的容器(字符串缓冲区对象内部有一个char类型的数组,只是这个数组属于可变数组)StringBuffer属于线程安全的缓冲区对象,StringBuilder属于线程不安全的缓冲区对象。通过这两个容器可以对字符串数据进行

增:append。。

删:delete。。

修改setcharAt
(int index, char ch)


插入insert。。

查找indexOf等操作

4.集合

相对于前面的容器的局限:变量存储数据时,存储多个数据,就会书写比较麻烦;数组只能存储同一种类型的数据,当数组容量确定后,无法再添加新值。集合也是一种容器,相对于数组来说:集合大小可以改变,集合中可以存放任意引用类型的数据,集合中元素除了可以使用角标访问以外还可以使用其他方式访问。

4.1集合框架介绍

集合是用来存储数据的。但是,在存储数据时,会存在不同的存储需求,例:存储的数据不能有重复值,存储的数据会按照某种规则自动排序。针对不同的存储需求,java就提供不同的集合对象,而这些集合对象却具有共性的功能:存储功能、获取功能等。java对于共性的功能会向上抽取,经过不断的向上抽象,最终形成了java中的集合框架体系(简称:集合框架)



我们再看看集合类中完整关系图:



4.2Collection接口:

通过查阅API:

1、 Collection集合,属于集合框架的顶层接口

2、 在Collection集合下具有两个子接口:Set、List

Collection集合中的常用方法:

添加方法:boolean add(Object obj)

向集合中存储指定obj对象元素。存储成功则返回true

删除方法:boolean remove(Object obj)

从集合中删除指定的obj元素。 如果obj存在则删除成功并返回true

修改方法:在Collection集合中没有修改集合中元素的功能

查询方法:在Collection集合中没有直接可以从集合中获取元素的功能,当需要从Collection集合中获取元素,需要通过遍历集合的方式获取集合中存储的元素

遍历Collection集合: Iterator iterator()

其它方法:

void clear() 清空集合中存储的所有元素(删除全部数据)

boolean contanis(Object obj) 判断集合中是否包含指定的obj元素

boolean isEmpty() 判断是集合中是否有存储的元素(没有存储元素则返回true)

int size() 获取集合中所存储元素的个数(集合的大小)

Object[] toArray() 把集合对象转为数组

|---------------Collection接口

|---------List接口:有序、可以存储重复元素、可以通过角标来操作集合(添、删、改)

List集合有一个专属的迭代器:ListIterator

通过角标来添加元素 add(int index,Object obj)

通过角标来删除元素 remove(intindex) 返回所删除的元素

通过角标来修改元素 set(intindex, Object obj) 返回修改之前的元素

通过角标来获取元素 get(intindex)

|----ArrayList:实现了List接口,底层是可变数组结构

查询速度快,增删速度慢

|---LinkedList:实现了List接口,底层使用链表结构(有头有尾),特有方法都是围绕着头和尾去设计的

查询速度慢,增删比较快

addFirst(Object obj) 在头角标添加元素

addLast(Object obj) 在尾角标添加元素

removeFirst() 删除头角标元素

removeLast() 删除尾角标元素

getFirst() 获取头角标元素

getLast() 获取尾角标元素

|----Vector 底层使用数组结构

|-----Set接口:无序、不能存储重复元素,没有角标只能使用迭代器来遍历集合

Set接口是继承了Collection接口,所以Set集合中的方法都来自于Collection

|----HashSet:实现了Set接口,底层是哈希表结构,只能使用Iterator来遍历

|----LinkedHashSet类:底层是哈希+链表结构

|----TreeSet:实现了Set接口,底层是二叉树结构,在添加元素时会对元素进行排序

排序方式有两种:

1, 自然排序(前提:对象必须具备compareTo方法[实现Comparable 接口])

2, 比较器排序(使用Comparetor进行排序)


注意:
当对象同时具有自然排序和比较器排序,优先比较器排序

Map接口:不能直接使用迭代器遍历。

添加: put(K key,Vvalue) key在集合中是唯一的 value可以存储重复元素

put方法在添加对象时,key就表示键,value就表示值,put存储的是一对键值对

当存储对象时,会按key的名称先进行查找,没有找到相同的key,就存储value对象,并返回null

如果存储时有相同的key已经在map集合中存在了,value对象会覆盖之前的对象,并返回之前的对象(旧的value对象)

删除: remove(Object key)

根据指定的key值去map集合中查找相同的key,如果没有相同的key,不执行删除操作,并返回null

如果存在相同的key值,就删除相同key值对应value的一对对象(key-value同时删除) ,并返回被删除的value(旧的value对象)

修改: 使用put方法进行修改

获取: get(Object key)

根据指定的key去集合中查找相同的key,如果有相同的key,就返回查找到的key所对应的value对象,如果没有相同的key,返回null

size() 获取map集合所存储key-value对的个数

判断: containsKey(Object key) 根据指定的key去map集合判断有没有相同的key存在

containsValue(Object value) 根据指定的value去map集合判断有没有相同的value

isEmpty() 判断map集合是否为空

|-----Hashtable类:数据结构:哈希表;不允许使用null作为key和value,已经被HashMap代替

|----Properties类:属性集。存储键值都是字符串,可以利用流来对键值进行操作

|----HashMap类:数据结构:哈希表;允许使用null作为key和value,但是key只能有一个null(key要保证唯一性),value可以存储重复对象

|----LinkedHashMap类:链表+哈希表。可以保证存取的元素顺序是一致的

|----TreeMap类:数据结构:二叉树。可以按照存储的key进行排序

上面给大家罗列了集合的这么多内容体系,想必你一定会感觉到集合功能的强大,或者是集合在Java开发中占据的位置了,下面再给大家介绍集合工具类Collections中更使用的常用的工具:

1)Collections.max(Collection<?extends T>coll ),根据元素自然排序,返回给定的Collection的最大值,当然求最小值min,同样的道理

2)Collections.sort(集合对象),对集合内的元素排序

3)Collections.reverse(集合对象);将集合元素排序反转

注意:通常方法2、3只针对存储有序的集合使用,例如List集合

数组中和集合的转换:

数组转集合:使用集合工具类Arrays下的asList()方法。如将一个整形数组转为集合

Integer num []{2,3,4,5,6};

List list = Arrays.asList(num);此时list集合中存储的就是数组中元素。

注意:1)将数组转为集合时一定要将数组类型定义为包装类型,而非基本类型

2)数组转换后的存储数组元素的集合大小就确定了,不能再向里面添加元素

集合转数组:set.toArray(); 把集合set转为数组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: