集合
来源:互联网 发布:淘宝怎么解决管控纪录 编辑:程序博客网 时间:2024/05/01 09:21
集合是存储对象的容器 大小无限 类型无限 能够让我们更好的管理对象 有可能出现堆内存溢出 通过用泛型限定为某一类型 更安全更方便
最上层有2种接口 Collection和map接口 Set和List接口继承Collection接
List实现迭代和List迭代 可以通过Collections工具进行排序 要元素实现Comparable或指定Comparator比较器
ArrayList底层数组 有序 可重复 增删慢 改查块 数组越大速度越慢 已实现迭代 线程不安全 可以添加null
自己写的ArrayList
// Decompiled by DJ v3.7.7.81 Copyright 2004 Atanas Neshkov Date: 2011-7-7 下午 04:10:51// Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!// Decompiler options: packimports(3) // Source File Name: MySet.javapackage cn.nailsoul.banksystem.util;import java.io.PrintStream;import java.util.ConcurrentModificationException;import java.util.Iterator;public class MySet implements Iterable{int modCount=0; public MySet(){ objs = new Object[0]; } public boolean contains(Object obj){ boolean flag = false; Object aobj[] = objs; int i = aobj.length; int j = 0; do { if(j >= i) break; Object obj1 = aobj[j]; if(obj1.equals(obj)){ flag = true; break; } j++; } while(true); return flag; } public int contains(Object obj, int i){ i = -1; int j = 0; do { if(j >= objs.length) break; if(objs[j].equals(obj)){ i = j; break; } j++; } while(true); return i; } public boolean add(Object obj){ boolean flag = false; Object aobj[] = new Object[objs.length + 1]; System.arraycopy(((Object) (objs)), 0, ((Object) (aobj)), 0, objs.length); aobj[objs.length] = obj; objs = aobj; flag = true; modCount++; return flag; } public Object[] getAll(){ return objs; } public boolean delete(Object obj){ boolean flag = false; int i = contains(obj, 1); if(i >= 0){ Object aobj[] = new Object[objs.length - 1]; System.arraycopy(((Object) (objs)), 0, ((Object) (aobj)), 0, i); System.arraycopy(((Object) (objs)), i + 1, ((Object) (aobj)), i, aobj.length - i); objs = aobj; modCount++; flag = true; } return flag; } public boolean delete(int i){ boolean flag = false; if(i >= 0){ Object aobj[] = new Object[objs.length - 1]; System.arraycopy(((Object) (objs)), 0, ((Object) (aobj)), 0, i); System.arraycopy(((Object) (objs)), i + 1, ((Object) (aobj)), i, aobj.length - i); objs = aobj; modCount++; flag = true; } return flag; } public boolean update(Object obj){ boolean flag = false; int i = contains(obj, 1); System.out.println(0x1b207); System.out.println(i); System.out.println(obj); if(i >= 0){ System.out.println(222); objs[i] = obj; modCount++; flag = true; } return flag; } public boolean update(Object obj, int i){ boolean flag = false; if(i >= 0) { objs[i] = obj; modCount++; flag = true; } return flag; } public int getLen() { return objs.length; } private Object objs[];public Object[] getObjs() {return objs;}@Overridepublic Iterator iterator() {// TODO Auto-generated method stubreturn new Ite();}class Ite implements Iterator{int expectedModCount=modCount;int pos=-1,count=MySet.this.getLen();Object[] objs=MySet.this.getObjs();@Overridepublic boolean hasNext() {return pos+1>=count?false:true;}@Overridepublic Object next() {check();return objs[++pos];}@Overridepublic void remove() {check();if(MySet.this.delete(++pos)){modCount++;}}public void check(){ if (modCount != expectedModCount){throw new ConcurrentModificationException();}}}}
LinkedList 底层链表+数组实现 增删块 改查慢 数组越大速度越慢 已实现迭代 可用于压弹栈 和队列数据结构 线程不安全
vector 底层数组 被ArrayList 替代 线程安全 SequenceInputStream要用到它 当然也可以不用
Set 无序 不可重复 底层是调用的Map+自己实现迭代
HashSet 底层Hash表 线程不安全 元素的操作通过hashCode方法、==和equals方法完成 先通过hashCode方法去除Hash值 如果Hash值相等 相等Hash值的元素用==比较如果为false用equals比较 可以添加null
set方法调用的是map的put方法 set的参数作为put的key创建一个对象作为value
TreeSet 底层 二叉树实现 元素操作通过compareTo方法 如果元素没实现该方法 则只能添加一个元素否则报异常 线程不安全
Map接口键值对 HashMap和TreeMap实现Map接口 要迭代map先要将map中取出set在迭代set
HashSet,HashMap和TreeSet,TreeMap的区别在于TreeSet,TreeMap在完成该功能的同时还进行排序 排序是通过容器里的对象的类实现Comparable接口 覆盖compareTo方法实现的
List接口没有实现排序功能的实现类 可以通过创建个自己的比较器实现Comparator接口 通过Collections.sort(对象,比较器)来进行排序 对象必须是List类型的.
对于Collection ,Set,Map类型的要查看该集合里的对象通常需要用到Iterator接口 如
public class CollectionDemo{
public void collectionDemo(){
Collection col=new HashSet();
col.add("1");
col.add("2");
col.add("3");
Iterator it=col.iterator();
while(it.hasNext()){
String s=it.next().toString; //it.next()返回的是Object类型的对象
System.out.println(s);
}
}
}
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 集合
- 根据查询的关键字,实现获取百度指定页数的搜索结果的信息(网页地址,标题,摘要,并有排序的说明)
- C++图像处理 -- 图像颜色混合(中)
- 字节对齐
- 免费教程大型网站整理大集合
- 目标习惯和目标方式
- 集合
- [ActiveRecord] 之七:多数据库配置
- [ActiveRecord] 之八:Queries
- VS2010测试方面的文章
- java读取文件摘要
- Oracle RAC 与 网卡绑定
- Java的WEB应用性能问题定位方法总结(二):常见性能问题处理工具
- 使用Google Map Api在Android平台上开发地图应用2
- JavaScript相关概念