集合
数组的长度是固定的,操作数据很麻烦,java内部给我们提供了集合类用来存放数据的一个容器。不仅可以存储对象,长度可改变
集合类
- 它的长度可以改变
- 能存储任意的对象
长度是随着你元素的增加而增加
数组和集合区别?
数组可以存基本数据类型和引用数据类型
- 集合当中只可以存放引用数据类型
- 数组的长度固定,集合长度是可以改变的
数组与集合的应用?
- 数据元素个数固定-数组
- 元素不固定-集合
集合类在JAVA中的体系结构
[Collection接口]
####Collection集合-添加元素
添加一个元素boolean add(E e)
添加一个集合boolean addAll(Collection<> c)
public static void main(String[] args){
Collection c = new ArrayList();
c.add(999);
c.add(999);
c.add("String");
c.add(true);
System.out.println(c);
}
[999, 999, String, true]
#####注意
- add()方法是添加元素
- 添加的基本数据类型会自动装箱
- 可以添加重复元素
- 内部已经覆盖了tostring()方法
Collection集合-移除元素
移除一个元素boolean remove(Object o)
删除所有元素void clear()
判断是否为空boolean isEmpty()
删除两个集合的交集boolean removeAll(Collection<?> c)
Collection c = new ArrayList();
c.add("6");
c.remove("6");
//清空所有
c.clear();
System.out.println(c.isEmpty());
System.out.println(c);
Collection集合-获取集合长度
System.out.println(c.size());
Collection集合-集合转数组
- List转数组 然后遍历
Object[] toArray()
Collection c = new ArrayList();
c.add(1);
c.add(2);
System.out.println(c);
>> [1,2]
/*集合转数组*/
Object[] o = c.toArray();
System.out.println(o[0]);
>> 1
Collection集合-遍历
- 方式一
toArray()
`
java
Collection per = new ArrayList();
per.add(new Person(“张三”));
per.add(new Person(“李四”));
Object[] res = per.toArray(); //自动把数组当中所有元素向上转型
System.out.println(res); //打印则是地址
for(int i=0; i<res.length; i++) {
Person p = (Person)res[i]; //向下转型
System.out.println(p.getName());
}
- 方式二`迭代器`
```java
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(new Cat("Mini"));
c.add(new Cat("Aimi"));
//遍历
Iterator it = c.iterator(); //放进容器 里面的对象都是Object类型
while(it.hasNext()) {
Cat o = (Cat)it.next(); //向下转型
System.out.println(o.name);
}
}
总结
- 判断调用的集合是否包含(全部包含)传入集合
boolean containsAll(Object o)
- 取两个集合的交集
boolean retainAll(Collection<?> c)
add()
可以添加一个元素到集合中addAll()
集合添加集合remove()
移除一个元素clear()
清空集合isEmpty()
判断是否为空size()
获取集合长度
[List]
根据角标添加元素
- list是有角标的可以根据角标去添加元素。
- list.add(index,Object element); index必须要<=size
获取指定角标的元素
System.out.println(list.get(0));
迭代器-删除元素
迭代器-遍历集合
public class Test2 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
Iterator it = list.iterator();
//遍历集合
while(it.hasNext()) {
//取出对应的元素
String s = (String)it.next();
System.out.println(s);
if(s.equals("2")){ //等于“2”删除
it.remove();
}
}
System.out.println(list);
}
}
迭代器-添加元素
public class Main {
public static void main(String[] args) {
List list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
//list当中有自己的迭代器
ListIterator it =list.listIterator();
while(it.hasNext()) {
String str = (String)it.next();
if(str.equals("2")) {
it.add("99");
}
}
System.out.println(list);
// hasPrevious() 是否含有上一个
while(it.hasPrevious()) {
System.out.println("LOOP" + it.previousIndex());
System.out.println(it.previous());
}
}
[ArrayList]数组实现
把原有的数据复制出来,再创建一个新数组容量增加,把复制的数组放到新数组当中原来的数组被扔掉
添加元素
把对应的值,通过前一个值覆盖后一个值得方式,依次往后移动,把要插入的值覆盖到指定的位置
删除元素
依次往前赋值,最后一个元素设为null
去除元素
/*
1. 创建一个空的集合
2. 依次取出每一个元素
3. 每取出一个元素,先判断新集合当中是否包含该元素
4. 如果包含 就不添加了
*/
public static ArrayList getSingleELe(ArrayList list){
/*创建一个空的集合*/
ArrayList newList = new ArrayList();
/*依次取出每一个元素*/
ListIterator it = list.listIterator();
while(it.hasNext()){
Object obj = it.next();
/*判断是否包含其中*/
if(!newList.contains(obj)){
newList.add(obj);
}
}
/*返回新集合*/
return newList;
}
“如果是对象类型 需要覆写eauals方法”
[LinkedList]链表实现
public class Main {
public static void main(String[] args){
LinkedList a1 = new LinkedList();
a1.add(1);
a1.add(2);
a1.add(3);
/*特有*/
// 第一个位置添加元素
a1.addFirst("Start");
// 最后位置添加元素
a1.addLast("End");
// 移除第一个元素
a1.removeFirst();
// 移除最后一个元素
a1.removeLast();
// 根据角标获取元素
System.out.println(a1.get(2));
}
}
[Vector]数组实现
import java.util.Enumeration;
import java.util.Vector;
public class Main {
public static void main(String[] args){
Vector ve = new Vector();
/*特有方法 加锁更安全*/
// 添加元素
ve.add(1);
ve.addElement(2);
System.out.println(ve);
// 遍历元素
Enumeration e = ve.elements();
while(e.hasMoreElements()){
System.out.println(e.nextElement());
}
}
}
TreeSet
- 对添加的元素进行排序
如果添加的是一个对象。需要实现接口Comparable<ClassName>
覆写compareTo()
如果返回值为0则添加一个对象
如果返回值为1返回全部对象
返回-1则返回逆序。