JAVA之集合Collection
标签(空格分隔): java 集合 collection
Java集合分为Collection和Map
1.集合和数组的区别
- 数组的长度固定;集合长度可变
- 数组存储的相同类型的元素;集合可以存储不同类型的元素
- 数组可以存储基本数据类型和引用类型;集合只能存放引用类型
2.集合的分类
Collection接口的实现接口有List和Set
List的常用实现类有ArrayList,Vector,LinkedList
Set的常用实现类有HashSet,TreeSet
3. List接口
List的类型是接口,这是有序的集合.(此处的有序并不是指集合内的元素按照从小到大排序,而是元素出集合的顺序和进集合的顺序是相同的)使用此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素;与set不同,列表List通常允许重复的元素。
4.集合常用的方法
Collection通用的方法
add(E e); //添加元素
clear(); //暴力清除集合中的所有元素
contains(Object o); // 返回值类型:boolean。判断集合是否包含某个元素
isEmpty();//返回值类型:boolean。如果此集合不包含元素,则返回true
size(); //返回值类型:int。返回集合中的元素数
List特有的方法(ArrayList)
add(int index,E e);//在指定位置添加元素,并不会替换掉原来位置的元素
addAll(int index, Collection<? extends E> c);
//在指定的位置插入集合c的全部元素,如果插入后没有变化则返回flase,否则返回true
get(int index);//获取指定索引值位置的元素,返回一个对象
remove(int index);//根据索引删除元素,返回被删除的元素
set(int index,Object element);//根据索引修改元素,返回被修改的元素
List<E> subList(int fromIndex, int toIndex);//返回索引值中间的所有元素的集合,包左不包右
LinkedList特有的方法(ArrayList)
addFirst(E e); //在链表集合的第一位插入元素
addLast(E e);//和普通的add()方法一样,不常用
getFirst(E e); //获取功能,返回第一个元素
getLast(E e); //获取功能,返回最后一个元素
removeFirst(E e);//删除第一个元素并返回
removeLast(E e);//删除最后一个元素并返回
List子类面试题
- ArrayList:底层数据结构是数组,查询快,增删慢;线程不安全,效率高
- Vector:底层数据结构是数组,查询快,增删慢;线程安全,效率低.现已不常用
- LinkedList:底层数据结构是链表,查询慢,增删快;线程不安全,效率高
List的列表迭代器列表迭代器
ListIterator listIterator():List集合特有的迭代器。
该迭代器继承了Iterator迭代器,所以,就可以直接使用hasNext()和next()方法。
特有功能:
Object previous():获取上一个元素;
boolean hasPrevious():判断是否有元素。
/*需求:有如下集合,请判断该集合里面是否包含“java”这个元素,如果有,就添加一个“love”元素
*
*/
List list = new ArrayList();
list.add("hello");
list.add("java");
list.add("world");
/* 1,展示一个会出错的代码
* 出错提示:ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
* 也就是说:迭代器遍历元素的时候,通过集合是不能修改元素的
*/
Iterator it = list.iterator();
while(it.hasNext()){
String s = (String)it.next();
if(s.equals("java")){
list.add("love");
}
}
System.out.println(list);
/* 2,当遇到以上错误时,给出两种解决办法
* 首先展示第一种解决办法:使用ListIterator的add()方法
*/
ListIterator lit = list.listItertor();
while(lit.hasNext()){
String s = (String)lit.next();
if(s.equals("java")){
lit.add("love");//注意:此处是利用迭代器进行添加元素,刚添加的元素处于刚才迭代的元素的后面。
}
}
/* 3,给出另一种解决办法:
* 使用普通循环方法,即使用get()和size()的方法
*/
for(int i = 0;i<list.size();i++){
String s = (String)list.get(i);
if(s.equals("java")){
list.add("love");//注意:此处是将新的元素添加到了集合的最后
}
}