为什么要使用集合?
储存数据的容器有:变量,数组,数据库
内存:变量(单一的空间)数组(多个连续的空间,有下表,访问数据比较快,但是数组长度固定,只能储存同一类型,增删非常麻烦)
外部:数据库(大量,易于管理)
集合:
* 什么是集合?
* 集合是java中一个存储数据的容器
* 在java中集合这种容器有很多种,将这些容器所具备的共性的内容不断的向上抽取,就形成了一个集合体系
* 集合体系的顶层就是Collection
* 详细就看图
- 怎么去创建集合?
- 1.Collection interface
- 不能直接创建Collection的实例
- 特点 : 一些 集合 允许有重复的元素,而另一些则不允许。
- 一些 集合 是有序的,而另一些则是无序的。
实现集合也就是其子类 Map list set 三大类
List 有序 重复元素的集合 list接口下的集合都有索引
//向指定下表添加元素
* 添加
* add(int index, E element) 向指定的下标添加元素
* addAll(int index, Collection<? extends E> c) 向指定的下标添加另一个集合
*
* 获取
* get(int index) 获取指定下标的元素
* 和String类似
* indexOf(Object o)
* lastIndexOf(Object o)
* subList(int fromIndex, int toIndex)
*
* 迭代器
1.同样不能通过增强for来修改集合
for (Object object : list) {
//注意 : 在迭代集合的同时,不能通过集合来修改本身的内容
if("fff".equals(object)){
list.add("ggg");//同样会抛出异常
}
}
2. ListIterator li= list.listiterator();
while(li.hasNext())
if(li.next.equals("fff")){
li.add("ggg"); //通过拿到listiterator 通过迭代器本身来对集合进行修改,就不会产生异常
}
}
* 删除
* remove(int index) 删除指定下标的元素
* 修改
* set(int index, E element) 修改指定下标的元素
*
list 可以分为ArrayList , LinkedList
ArrayList 数组结构 不同步,线程不安全的集合,效率比较高 储存的数据不唯一,但是有序(插入顺序)便于查找
为什么ArrayList是使用的较多的集合? 查询的操作比增删要多
LinkedList 链表结构的集合
* 对集合开头结尾的操作的方法
* addFirst(Object o); 插入开头的方法
* addLast(Object o); 插入结尾的方法
*
System.out.println(list.removeLast()); //删除并返回最后一个元素的内容
System.out.println(list.removeFirst()); //删除并返回第一个元素的内容
//也就类似于查找集合中的元素
System.out.println(list.getFirst()); //直接返回第一个元素
System.out.println(list.getLast()); //直接返回最后一个元素
//创建集合容器
Collection c = new ArrayList();
Collection c1 = new ArrayList();
添加:
add(Object e)
addAll(Collection c)
c.add("c1中的内容1");
c.add("c1中的内容2");
c.add("c1中的内容3");
//创建addAll()
c.addAll(c1);
判断:
//contains(Object o) 包含
System.out.println(c.contains("asd"));
System.out.println(c.contains(new Student("张三",12)));
//containsAll(Collection<?> c)
System.out.println(c.containsAll(c1));
//判断集合里面是否为空
isEmpty()
删除
remove(Object o) 删除指定元素
System.out.println("remove : " + c.remove("asd")); //代表删除成功 返回true
removeAll(Collection<?> c)删除阐述集合c中的全部内容
System.out.println("removeAll : " + c.removeAll(c1));
System.out.println(c);
retainAll(Collection<?> c) 保留参数集合c中的全部内容
System.out.println("retainAll : " + c.retainAll(c1));
System.out.println(c);
clear()清空集合中的所有内容
c.clear();
System.out.println(c);
* 其他:
*
* iterator() ***** 迭代器 用于获取集合中的元素
* 获取迭代器
Iterator it = c.iterator();
//遍历元素 取出元素的时候,如果存储的时候数据类型不一致,就很有可能出现 ClassCastException 类型转换异常 ,泛型的技术来解决这个问题
//System.out.println(it.hasNext());//判断有没有下一个元素
//System.out.println(it.next());;//返回下一个元素 抛出一个异常 NoSuchElementException 没有元素
while(it.hasNext()){
System.out.println(it.next());
}
* size()
获取集合中元素的个数
System.out.println(c.size());
toArray()
toArray() 将集合转换成Object类型数据
Object[] arr = c.toArray();