04-集合---list、Set

###Conllection:

list:元素有序,可以重复,因为这个list有索引。
set:元素无序,元素不可以重复,没有索引。

###ArrayList:
底层是数组结构。查询快,增删慢。(因为插入或者删除的时候,所改变元素以及后面的所有元素都要跟着一起动,改变自己原先的索引。元素少不明显,元素越多越明显)线程不同步。 ArrayList初始数组的长度是10,超过了10会new一个新的数组长度会50%延长 也就是变成15,并把之前元素拷贝到新的数组中,并把新元素添加到后面去。
LinkedList:底层用的是链表。查询慢,增删快。(因为链表中每一个元素只记得自己前后面的元素,一个一个的查下去就很慢,但是增删的时候这个特点就变成了优势。)
vector:底层是数组结构,线程同步。无论是正删改查都很慢,被ArryList替代了。它如果长度超过了会100%延长.

List特有方法:凡是可以操作角标的都是list特有的方法

#####增:
//向集合当中添加元素,参数的类型和泛型一致
add(index,element);
addAll(index,collection);添加一堆元素。
#####删:
//从集合当中删除元素,参数是索引编号,返回值级是被删掉的元素。
remove(int index);
#####改:
set(index,element);
#####查:
//从集合中获取元素,参数是索引编号,返回值就是对应位置的元素。
get(int index);
subList(form,to);
listIterator();
#####获取集合尺寸:

集合名称.size();获取集合尺寸长度,返回值是集合中包含的元素个数。

#####遍历list集合

public static void main (String[] args){
    ArrayList <Strring> list = new ArrayList<>();
    list.add("张三");
    list.add("李四");
    list.add("王五");
    //遍历集合
    for(int i = 0; i < list.size () ; i ++ ){
       System.out.println(list.get(i));
  }
}

#####LinkedList特有方法:

addFirst();
addLast();

//获取元素,但不删除元素,如果集合中没有元素,会提示NoSuchElementException
getFirst();
getLast();

//获取元素:但是元素被删除,如果集合没有元素,会提示NoSuchElementException
removeFirst();
removeLast();

在jdk1.6出现了替代方法
offerFirst();
offerLast();

//获取元素,但是被删除元素,如果元素集合中没有。就返回null。
peekFirst();
peekLast();

//获取元素,但是元素被删除,如果集合中没有元素。就返回null。
pollFirst();
pollLast();

List集合特有的迭代器,ListIterator是Iterator的子接口
在迭代时 不可以通过集合对象的方法操作集合中的元素,因为会发生并发修改异常,所以在迭代器时 只能用迭代器的方法操作元素,可是Iterator方法是有限的,只能对元素进行判断,去除,删除的操作,如果想要其他的操作,比如添加修改就需要使用其子接口,listIterator。该接口只能通过list集合的listIterator方法获取。

public static void main (String[] args){
    ArrayList al = new ArrayList();
    //添加元素
  al.add("java1");
  al.add("java2");
  al.add("java3");
  al.add("java4");
  sout("原方法集合是"+al);
 //原方法集合是:[java1,java2,java3,java4]


  //在指定元素位置添加元素。
  al.add(1,"java10086");
  sout("指定以后"+al);
  //指定以后:[java1,java10086,java2,java3,java4]

  //删除指定的位置元素
  al.remove(2);
  sout("删除指定位置元素后:"+al);
 //删除指定位置元素后:[java1,java10086,java3,java4]

  //修改元素
  al.set(2,"java999");
  sout("修改指定元素后:"+al);
//修改指定元素后:[java1,java10086,java999,java4]

//通过角标查取元素。
al.get(1);
sout("获取第1号角标的元素是:"+al);
//获取第1号角标的元素是:[java10086]


//获取全部元素
for(int x=0;x<al.size();x++){
    sout("al("+x+")="+al);
    }
}
//al(0)=java1
//al(1)=java10086
//al(2)=java999
//al(3)=java4

//通过indeexOf获取对象的位置
sout("index="+al.indexof("java999"));
//获取索引位置1到3(不包含3)的元素
List sub = al.subList(1,3);
sout("sub="+sub);
//index=2
//sub=[java10086,java999]

###set:元素无序,元素不可以重复,没有索引。
HashSet:数据结构是哈希表,线程是非同步。保证元素唯一性的原理是判断元素的hashCode值是否相同。如果相同,还会继续判断元素的equals方法时候为true。
TreeSet:可以对set集合中的元素进行排序。一般会默认ASC码进行排序。底层数据结构是二叉树。保证元素唯一性的一句 compareTo方法return0。

TreeSet排序的第一种方式:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法,这种方式也成为元素的自然排序,或叫做默认排序。

TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。在集合初始化时就有了比较方式,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值