java集合框架(List、Set、Map)

一、集合概述:

1.数组和集合有什么不同?

数组虽然也可以存储对象,但长度是固定的,集合长度是可变的;

数组中可以存储基本数据类型,集合只能存储对象;

2.集合类的特点:

集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

二、集合Collection体系:

Collection

|--List :元素是有序的,元素可以重复,因为该集合体系有索引。

     |--ArrayList:底层的数据结构使用的是数组结构,线程不同步。

                         特点:查询速度快,但是增删稍慢。

     |--LinkedList:底层的数据结构使用的是链表数据结构.

                           特点:查询速度稍慢,但是增删速度很快。

      |--Vector底层的数据结构是数组结构,线程同步。被ArrayList替代啦。

|--Set :元素是无序的,元素不可以重复,该集合没有索引。

      |--HashSet:底层数据结构是哈希表

       |--TreeSet

 

三、迭代器:

其实就是集合的取出元素的方式(遍历)。

Iterator it = al.iterator(); //获取迭代器,用于取出集合中的元素

while(it.hasNext())      //hasNext(),只要集合中还有元素迭代,返回true

{

       sop(it.next());

}

四、List:特有方法

凡是可以操作角标的方法都是该体系特有的方法。

增:

addindexelement);

addAllindexCollection);

删:

removeindex);

改:

setindexelement);

查:

getindex);

subListfromto);

listIterator();

 

五、List集合特有的迭代器,listIteratorIterator的子接口。

在迭代时,不可以通过集合对象的方法操作集合中的元素。

因为会发生并发异常。

所以,在迭代器时,只能用迭代器的来操作元素,可是迭代器方法是有限的,

只能对元素进行判断,取出,删除的操作。

如果想要其他的操作如:添加,修改等,就需要使用其子接口,listIterator.

该接口只能通过List集合的listIterator方法获取。

例子:

ListIterator li = al.listIterator();

while(li.hasNext())

{

Object obj = li.next();

if(obj.equals("java02"))

//li.add("java008");

li.set("java008");

sop("obj="+obj);

}

六、LinkedL特有方法:

一》LinkedList特有方法;

addFirst();在集合的头部添加元素。

addLast();在集合的尾部添加元素。

获取元素但不删除元素;如果集合中没有元素,会出现      NoSuchElementException异常

getFirst();获取集合第一个元素

getLast();获取集合最后一个元素

获取元素,但是获取到的元素将被删除,如果集合中没有元素,会出现    NoSuchElementException异常

removeFirst();

removeLast();

jdk1.6出现了代替方法:

offerFirst();

offerLast();

获取元素,但是不删除元素,如果集合中没有元素,会返回null

peekFirst();

peekLast();

获取元素,但是获取到的元素将被删除,如果集合中没有元素,会返回null

pollFirst();

pollLast();

七、HashSet:

|--Set :元素是无序的,元素不可以重复,该集合没有索引。

     |--HashSet:底层数据结构是哈希表

              HashSet是如何保证元素的唯一性那?

                是通过元素的两个方法,hashCodeequals完成的。

               如果元素的hashCode值相同,才会判断equals是否为true

               如果元素的hashCode值不同,不会调用equals方法。

             注意:对于判断元素是否存在,以及删除等操作。

              都依赖的方法是元素的hashCodeequals方法。

|--TreeSet

1.TreeSet特点:

treeSet底层数据结构(二叉树)

2.TreeSet排序的第一种方式:

让元素自身具备比较性,

元素需要实现Comparable接口,覆盖compareto方法。

这种方式也成为,元素的自然顺序,或者叫做默认顺序;

TreeSet的第二种排序方式:

当元素自身不具备比较性时,或者具备的比较性不是所需要的。

这时就需要让集合自身具备比较性。

在集合初始化时,就有了比较性。

定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。

定义一个类,实现Comparator接口,覆盖compare方法。

九、Map集合

 

1.Map集合:该集合存储键值对,一对一对往里存。而且要保证键的唯一性。

2.Map特有方法:

1.添加

putK keyV value);

putAllMap<?  Extends  K,? Extends  V>  m);

2.删除

clear();

RemoveObject key);

3.判断

containsValueObject value);

containsKeyObject key);

isEmpty();

4.获取

Getobject key);

Size();

Values();

entrySet();

keySet();

3.Map体系:

|--HashTable:底层是哈希表数据结构,不可以存入nullnull值,该集合是线程同步 的,jdk1.0,效率高。

|--HashMap:底层是哈希表数据结构,允许使用nullnull值,该集合是不同步的,jdk1.2. 效率高。

|--TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合的键进行排序。

十、Map集合的2种取值方式:

1.Set<k>  keySet:将map中所有的键存入到Set集合,因为set具备迭代器,

所以可以用迭代方式取出所有的键,再根据get方法,

获取每个键对应的值。

//先获取map集合中所有键的Set集合,keySet();

Set<String> keyset = map.keySet();

//有了set集合,就可以使用迭代器啦

Iterator<String> it = keyset.iterator();

while(it.hasNext())

{

String key = it.next();

System.out.print("key="+key="...");

//有了键可以通过map集合中的get方法获取对应的值

String value = map.get(key);

System.out.println("value="+value);

第二种方式:

一》Map.Entry:其实Entry也是一个接口,它是Map接口中的一个内部接口;

Interface Map

{

Public static interface Entry

{

Public abstract Object getKey();

Public abstract Object getValue();

}

}

Class HashMap implements Map

{

Class Haha implements Map.Entry

{

Public abstract Object getKey(){}

Public abstract Object getValue(){}

}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值