在实际开发中,需要将使用的对象存储于特定数据结构的容器中,二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等系统的开关机
完!!!!!!!!!!!!!!!!!!