集合
2015-06-21 12:31
190 查看
集合对元素的类型没有限制,且没有上限【容器】。每个容器对数据的存储方式不同,即数据结构。以下为共性方法:
存储: add, addAll
删除:clear,remove,removeall
取值:内部类Interator
在集合(容器)内部定义内部类Interator(用于定义具体的取出方式),若放在外部,不利于封装。同时,向外提供方访问方法(interator)。同时,将共性的判断抽出,那么每一个实现集合功能的均可以使用这个方法。
1) List集合 :有索引,有序【存入取出一致】,可重复。
三种list类型比较:
这种特有方法取出方式。与Interator方法相同。
特有方法:
addfirst,addlast; getfirst,getlast; removefirst,removelast
2) Set集合 :数据无序【存入取出不一致】,不可重复。功能与set集合一致。
(1) Hashset:
hashcode(); equals();
数据结构是哈希表【按哈希值来存】,线程非同步,元素唯一性判断依据是:元素哈希值是否唯一,然后还要判断equals是否为真。以默认Hash值存储时,会生成两个对象。同时,会生成对应的散列码,当需要比较两个对象时,java先比较他们的hashCode,若不同,则两个对象就不同,若相同,再比较equals()方法,判断是否相同,equals()系统默认是比较地址。
(2) Treeset
以默认的自然顺序进行存储。(二叉树的数据结构进行底层存储)
compareTo实现此接口的对象列表(和数组)可以通过Collections.sort(or Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。返回值正数,0,负数,,,分别代表指定对象大于,等于,小于本对象。
方式一、集合元素具有可比较性(元素实现compareable接口,以覆盖compareTo方法)
比较此对象与指定对象的顺序。
封装性不好,这里不再举例。
方法二:元素不具有可比较性,用比较器进行比较。实现Comparato接口,覆盖compare方法class treeset implements Comparator {
存储: add, addAll
删除:clear,remove,removeall
取值:内部类Interator
在集合(容器)内部定义内部类Interator(用于定义具体的取出方式),若放在外部,不利于封装。同时,向外提供方访问方法(interator)。同时,将共性的判断抽出,那么每一个实现集合功能的均可以使用这个方法。
String keyset = map.keyset(); //获得Iterator内部类对象,Iterator()返回Iterator的对象,其中,it指向集合的第一个元素 Iterator<string> it = keyset.Iterator() While( it.HashNest()){ //hasNext() 如果仍有元素可以迭代,则返回 true。 System.out.println(“key:”+it.next()+”value:”map.get(it.next())); } /***内存优化写法 For(Iterator<string> it =new interator()<string>;it.HashNest();) System.out.println(“key:”+it.next() +”value:”map.get(it.next())); // next() 返回迭代的下一个元素。 */
1) List集合 :有索引,有序【存入取出一致】,可重复。
List
由于有角标,可进行多种操作。Collection的literator,只有hasNext(),next(),remove()【删除引用】;若直接用集合操作,会造成并发问题。List通过 ListIterator,提供了修改的功能。
ListIterator<string> it = keyset.
listIterator(
int index)
//返回列表中元素的列表迭代器(以正确的顺序),从列表的指定位置开始。
三种list类型比较:
(1)Arraylist: 底层使用数组结构
角标按序排列,不断刷新。查询速度快,增删速度慢。线程不同步。默认数组长度是10,超过时,new一个新数组,默认延伸50%.(2)Vector:数组数据结构
线程同步,被Arrraylist取代。默认延伸50%。枚举(Enumoration接口)这种特有方法取出方式。与Interator方法相同。
(3)Linkedlist: 底层使用双链表结构
查询速度慢,增删速度快。一般元素特变多时使用。特有方法:
addfirst,addlast; getfirst,getlast; removefirst,removelast
2) Set集合 :数据无序【存入取出不一致】,不可重复。功能与set集合一致。
(1) Hashset:
hashcode(); equals();
数据结构是哈希表【按哈希值来存】,线程非同步,元素唯一性判断依据是:元素哈希值是否唯一,然后还要判断equals是否为真。以默认Hash值存储时,会生成两个对象。同时,会生成对应的散列码,当需要比较两个对象时,java先比较他们的hashCode,若不同,则两个对象就不同,若相同,再比较equals()方法,判断是否相同,equals()系统默认是比较地址。
(2) Treeset
以默认的自然顺序进行存储。(二叉树的数据结构进行底层存储)
compareTo实现此接口的对象列表(和数组)可以通过Collections.sort(or Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。返回值正数,0,负数,,,分别代表指定对象大于,等于,小于本对象。
方式一、集合元素具有可比较性(元素实现compareable接口,以覆盖compareTo方法)
compareTo(T o)
比较此对象与指定对象的顺序。
封装性不好,这里不再举例。
方法二:元素不具有可比较性,用比较器进行比较。实现Comparato接口,覆盖compare方法class treeset implements Comparator {
@Override public int compare(Object obj1, Object obj2) { // TODO Auto-generated method stub if (!((obj1 instanceof Person) && (obj2 instanceof Person))) { throw new RuntimeException("Funk you"); } else { Person person1 = (Person) obj1; Person person2 = (Person) obj2; if (person1.getName() == person2.getName()) { if (person1.getAge() == person2.getAge()) { return 1; } } return 0; } } }
相关文章推荐
- 学习笔记(四)多态
- Web前端从入门到精通-1 高级语言基础以及前端简介
- HTML5系列三(多媒体播放、本地存储、本地数据库、离线应用)
- 组态Log4j(非常具体的)
- HTTPS 客户端发送请求(三)
- 【MyBatis框架】mapper配置文件-foreach标签
- Python计算地图上两点经纬度间的距离
- 第十五周oj刷题——Problem A: 长方柱类【C++ 类定义】
- SQL Server DBA三十问
- 人and绩效and职业道德
- 砖8 跑filebenchtrace
- poj3254 Corn Fields
- Leetcode 223 Rectangle Area
- 菜鸟教程工具(三)——Maven自己主动部署Tomcat
- 【MyBatis框架】mapper配置文件-关于动态sql
- 第十五周oj刷题——Problem B: 矩形类定义【C++】
- HTTP内容篡改实践
- IP地址 网段的划分
- 子View按规则自动移动Layout
- Maximum Gap -- leetcode