集合Collection

来源:互联网 发布:单桂敏淘宝哪个真的 编辑:程序博客网 时间:2024/06/05 01:16

集合


容器
java中存储一堆数据的存在,像一个箱子.

前面学过的容器有数组和StringBuffer StringBuilder
数组:同一类型的有序的,长度不可变的,可以存储基本数据类型也可以存储引用数据类型;

int[] arr = {1,2,3};//基本数据类型String[] arr ={"1","2","3"};//引用数据类型

StringBuffer :字符串缓冲区,线程安全的,长度可变的,常用于多线程中
StringBuilder: 线程不安全的,长度可变 ,,单线程
最终都是要转成String来进行操作

常见方法:添加:    append(data);//data除了byte和sort类型  尾部追加删除:    delete(int start, int end)//移除数据 包头不包尾    deleteCharAt(int index)//删除指定位置上的字符查询:    length()    indexOf(str),indexOf(str,index)//第一次出现的位置    lastIndexOf(str),lastIndexOf(str,index)//最后一次出现的位置修改:    insert(index,data)//在指定位置插入数据     setCharAt(index,ch)//指定位置设置为字符ch    replace(start,end,str)//替代    reverse()//反转

集合Collection


集合的特点:    长度可变,存储的是对象,不能是基本数据类型,    由于集合存储的数据结构不同分为List和Set接口Collection的常见方法:    增:    boolean add(e);//增加一个元素    boolean addAll(collection);//增加一个集合中的所有元素    删:    boolean remove(e)    boolean removeAll(coll)    boolean clear()    判断:    boolean isEmpty()    boolean contains(e)    boolean containsAll(coll)    获取:    int size();    Iterator<E> iterator();//获取迭代器 返回的是迭代器接口,由于集合的数据结构不同,每个集合都会有自己的迭代器的,再用迭代器迭代输出集合中的元素时,如果要修改元素,需要使用迭代器的方法.如果使用的是集合的方法进行操作的话,会出现并发修改异常ConcurrentModificationException():此处产生的原因就是因为集合再对元素修改的时候,迭代器iterator并不知道修改了    其他:    取交集  boolean retainAll(coll)    转为数组 toArray()

List

list是collection的子接口public interface final List<E> extends Collection<E>List是有序的,元素都有角标,元素是可重复的,null也可以,相对于collection 它有一些特殊的关于角标的方法 .add(index,e);addAll(index,coll)E get(index)//获取角标上的元素E remove(index)//返回的是被删除的对象E set(index,e)//修改指定位置上的元素 返回被修改的元素List subList(start ,end)//包头不包尾ListIterator<E> listIterator ;//list特有的迭代器 可以使用ListIterator 在迭代输出list的元素时:进行     添加  void add(e)     修改  void set(e)//用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。    删除  void remove()//移除 next 或 previous 返回的最后一个元素(可选操作)。

    for(ListIterator li = list.listIterator(); li.hasNext();) {    syso(li.next);    li.add("我是新来的");    li.remove();//移除了li.next()的值    li.set("我代替了next的值");    }

    逆向迭代输出list集合的所有元素     for(ListIterator li = list.listIterator(); li.hasPrevious();) {    syso(li.previous());    }

List的子类
由于数据结构的不同 ,所以list有很多子类,但常用的有3个:
1.ArrayList 数组,有序,不同步,查询快
2.LinkedList 链表和数组,有序,不同步,对首尾进行操作,增删快
3.Vector 数组,有序,同步,效率低,差不多过时了

Arraylist与Vector 跟List的方法差不多


LinkedList 频繁的增删的时候用1.执行add remove操作时,因为ArrayList是数组实现,每添加一次,都会产生新的数组对象,效率比较低。LinkedList在执行add操作时,要比ArrayList性能高.2.在执行get操作时,ArrayList是数组实现,可以理解连续内在空间,所以性能比较高。   LinkedList是链表实现,每一个中都保存了前一个的地址,在取出时效率低。特有方法:addFirst() addLast()getFirst() getLast()removeFirst() removeLast()

Set
Set 元素不重复,无序
常用子类:

    HashSet 哈希表实现 无序             为了保证数据的唯一性,在对自定义对象操作的时候,需要自定义对象重写hashCode()和equals()            当obj.hashCode()==obj2.hashCode() 才会进行equals()判断内容,只有当hashCode()和equals()都一致的时候才说对象是相等的,

TreeSet 二叉树实现 默认自然排序         使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法当自定义对象的时候,需要自定义对象实现Comparable,重写compareTo(obj)  class Student implements Comparable {@Overridepublic int compareTo(Object o) {    // TODO Auto-generated method stub    //需要重写    return 0;}}    或者 根据构造函数TreeSet(Comparator<? super E> comparator) TreeSet set = new TreeSet(new MyComparator());class MyComparator implements Comparator {@Overridepublic int compare(Object o1, Object o2) {    // TODO Auto-generated method stub    //需要重写    return 0;}}
0 0
原创粉丝点击