Java中的容器
来源:互联网 发布:剑雨江湖仙器进阶数据 编辑:程序博客网 时间:2024/06/03 20:26
容器在程序中具有最重要的角色,具有存储数据和传递数据的功能,对容器赋值正是对内存中一个地址单元赋值。我们通过容器可以对存储的或是传递的数据进行操作。这也是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转为数组
- Java中的容器
- JAVA中的容器arraylist
- java中的容器
- Java中的容器讲解
- Java中的容器
- Java中的缓存容器
- Java中的容器
- java中的容器类
- Java中的容器类
- Java中的容器类
- Java中的容器类
- Java中的容器类
- JAVA中的容器
- java中的各种容器
- java中的容器类
- java中的容器讲解
- Java中的容器
- Java中的容器
- myeclipse中配置mybatis的自动提示
- uva 11427 玩纸牌 概率
- 常见算法笔试题
- Qt 信号槽机制解析二 分析原代码
- uva 442 矩阵链乘
- Java中的容器
- 学习Android(1)
- print操作及重定向
- uva 10917 - Walk Through the Forest(最短路+记忆化)
- codeforces 21A Jabber ID
- 函数和方法
- SQL 中关于groupby的信息
- 数组和集合小总结
- OCiOS开发:汉字转拼音