集合Collection

集合


容器
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 {

@Override
public 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 {

@Override
public int compare(Object o1, Object o2) {
    // TODO Auto-generated method stub
    //需要重写
    return 0;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值