java系列:集合框架(一)

9 篇文章 0 订阅
2 篇文章 0 订阅

在实际开发中,需要将使用的对象存储于特定数据结构的容器中,二JDK提供了这样的容器-----集合框架,集合框架包含了一系列不同数据结构的实现类;

集合:存储数据的容器,长度可变,可以存储不同数据类型的数据;

Collection:单列集合的根接口,在java.util下的接口,他是各种集合中的父接口,子接口有List和Set;

List集合:

List接口是Collection的子接口,特点是元素有序(插入顺序)、可重复;

List接口有两个主要实现类:ArrayList和LinkedList,分别用动态数组和链表的方式实现了List接口,这两个类也是在util包下;

ArrayList:底层是一个动态数组,查询效率高,增删效率低;

LinkedList:底层是双向链表结构,查询效率低,增删效率高;

vector:底层实现和ArrayList一样,相较于ArrayList查询效率低,增删效率也低,但它是线程安全的;

我们在使用List时,不需要考虑集合的大小容量(和数组的差别),因为集合的容量是可以自动扩充的;

常用方法:

1)add():用来给定义的集合添加一个新元素

2)size():返回当前集合中存对象的数量;

3)clear():用于清空集合;

4)isEmpty():用于返回集合是否为空;

List list = new ArrayList();
list.add("张三");
list.add("李四");
//list.add(1);这个操作是正确的的,但是不建议在同一个集合里面放不同类型的元素;
System.out.println("集合中的元素个数:"+list.size());
System.out.println("集合是否为空:"+list.isEmpty());
list.clear();
System.out.println("集合是否为空:"+list.isEmpty());

5)addAll():将对应的集合中的所有元素存入该集合(并集);

6)removeAll():删除与另一个集合中相同的元素,他的“相同”逻辑通过equals()来判断;

7)retainAll():保留与另一个集合中相同的元素(交集),他的“相同”逻辑通过equals()来判断;

8)get():根据元素下标获取对应位置的元素并返回;

9)set(int index,Object new AA):将index位置的元素修改为AA,修改后还会降被修改的元素返回;

10)remove():删除指定下标的元素,并将删除的元素返回;

Set集合:

Set是无序的,用于存储不重复的对象集合,在Set集合中存储的对象中,不存在两个对象的equals()比较为true的情况;

Set集合没有get()方法,我们不能像使用List那样,根据下标获取元素,想获取元素需要使用Iterator(迭代器);

向集合中添加元素也是用add()方法,但是add()方法不是向集合末尾追加,因为无序;

HashSet和TreeSet是Set集合的两个常见的实现类,分别用hash表和红黑树结构;

HashSet:底层实现HashMap,存储的元素必须重写hashCode()和equals()方法,否则不能保证Set集合的不重复性;

TreeSet:底层是红黑树结构,添加不重复元素有两种方式;

        1)实现comparable接口,并重写compareTo()方法,如果方法返回0,表示两个数相等,这就是内部比较器;

        2)定义comparator类,创建TreeSet对象时作为参数传入;

在既有内部比较器又有外部比较器的情况下,以外部比较器为准;

HashSet值可以为空,TreeSet值不能为空;

在Set中还有一个,LinkedHashSet:这个是有序的set集合(此处的有序表示的是插入顺序);

Iterator 迭代器:

所有Conllection的实现类都实现了iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对集合元素迭代的便利,在java.util包下

1)Iterator有三个方法:

        ①boolean hasNext():判断指针后面是否有元素;

        ②next():指针跳到下一个元素上,并返回当前指向的元素(注意:next()方法只能在循环中出现一次);

        ③void remove():可以删除next()方法返回的元素

2)迭代器的使用方式:先问后拿,问:hasNext()该方法询问迭代器当前集合是否还有元素;拿:next()该方法会获取当前元素迭代器的迭代方法是while循环量身定制的

List list = new ArrayList();
list.add("one");
list.add("#");
Iterator it = list.iterator();
while(it.hasNext()){
    Object ob = it.next();
    System.out.println(ob);
}

3)迭代器中的删除问题:在迭代器迭代的过程中,我们不能通过“集合”的增删等操作,来改变集合的元素数量,否则会引发迭代异常,若想删除迭代出来的元素,只能通过Iterator迭代器中的remove()方法,但是不能重复调用两次!

while(it.hasNext()){
    String s1 = (String)it.next();
    if("#".equals(s1)){
        //不能使用list里面的remove();
        //list.remove(s1);
        it.remove();//删除当前迭代的元素;
    }
}

本人擅长Ai、Fw、Fl、Br、Ae、Pr、Id、Ps等软件的安装与卸载,精通CSS、Javascript、PHP、ASP、C、C++、C#、Java、Ruby、Perl、Lisp、python、Objective-C、Actionscript、Pascal等单词的拼写,熟悉Windows、Linux、Mac、Android、IOS、WP8等系统的开关机

完!!!!!!!!!!!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值