1.集合Collection
1.1 常用功能
boolean add(Object e): 向集合中添加元素
void clear():清空集合中所有元素
boolean contains(Object o):判断集合中是否包含某个元素
boolean isEmpty():判断集合中的元素是否为空
boolean remove(Object o):根据元素的内容来删除某个元素
int size():获取集合的长度
Object[] toArray():能够将集合转换成数组并把集合中的元素存储到数组中
代码:
package com.daigua16;
import java.util.ArrayList;
import java.util.Collection;
//boolean add(Object e): 向集合中添加元素
//void clear():清空集合中所有元素
//boolean contains(Object o):判断集合中是否包含某个元素
//boolean isEmpty():判断集合中的元素是否为空
//boolean remove(Object o):根据元素的内容来删除某个元素
//int size():获取集合的长度
//Object[] toArray():能够将集合转换成数组并把集合中的元素存储到数组中
public class CollectionDemo1 {
public static void main(String[] args) {
// Collection是接口 不能实例化
// 这里利用多态创建对象
Collection c = new ArrayList<String>(10);
System.out.println(c);
// add 添加元素
System.out.println(c.add("我是你爸爸"));
System.out.println(c.add("我是你妈妈"));
System.out.println(c.add("我是你奶奶"));
System.out.println(c);
// clear 清空结合中所有元素
// c.clear();
System.out.println(c);
// contains 判断是否包含某个元素
System.out.println(c.contains("我是你爸爸"));
// isEmpty 判断集合中的元素是否为空
System.out.println(c.isEmpty());
// remove 根据元素的内容来删除某个元素
System.out.println(c.remove("我是你奶奶"));
System.out.println(c);
// size 获取集合长度
System.out.println(c.size());
// toArray 将集合转换成数组
Object[] s = c.toArray();
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
}
}
1.2 迭代器
java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。我们要取出这些集合中的元素,可通过一种通用的获取方式来完成。
Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
集合中把这种取元素的方式描述在Iterator接口中。Iterator接口的常用方法如下
hasNext()方法:判断集合中是否有元素可以迭代
next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。
代码:
package com.daigua16;
import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
//hasNext()方法:判断集合中是否有元素可以迭代
//next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。
public class IteratorDemo {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("hello");
c.add("world");
c.add("java");
// 获取迭代器对象
Iterator it = c.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
1.3 并发修改异常
并发修改异常产生原因:
当使用迭代器遍历集合的时候,使用了集合中的 增加/删除 方法,导致并发修改异常产
代码:
package com.daigua16;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Collection;
//需求:判断集合中是否包含元素java,如果有则添加元素android
public class IteratorDemo2 {
public static void main(String[] args) {
// Collection c = new ArrayList();
List c = new ArrayList();
c.add("java");
c.add("python");
c.add("c");
Iterator it = c.iterator();
// 会报错
// while (it.hasNext()) {
// if (it.next().equals("java")) {
// c.add("android");
// }
// }
ListIterator lit = c.listIterator();
while (lit.hasNext()) {
if (lit.next().equals("java")) {
lit.add("android");
}
}
// 这里要倒着遍历
while (lit.hasPrevious()) {
System.out.println(lit.previous());
}
}
}
2.增强for&泛型
2.1 泛型的使用
当类上定义<>的时候就可以使用泛型,例如ArrayList类的定义:
class ArrayList<E>,那么我们在创建ArrayList对象的时候就可以指定<>中E的类型
ArrayList<String> al=new ArrayList<String>(),那么String就把E替换掉了
代码:
package com.daigua16;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class GenericDemo {
public static void main(String[] args) {
Collection<Student> s = new ArrayList<Student>();
s.add(new Student("呆瓜", 18));
s.add(new Student("猪娃", 19));
Iterator<Student> its = s.iterator();
while (its.hasNext()) {
Student temp_s = (Student) its.next();
System.out.println(temp_s);
}
}
}
class Student {
String name;
int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
2.2 增强for
格式:
for(元素的数据类型 变量 : Collection集合or数组){
}
代码:
package com.daigua16;
import java.util.ArrayList;
import java.util.Collection;
public class ForEachDemo {
public static void main(String[] args) {
Collection<Student> s = new ArrayList<Student>();
s.add(new Student("呆瓜", 18));
s.add(new Student("猪娃", 19));
for (Student student : s) {
System.out.println(student);
}
}
}
3.List子体系
3.1 List特有功能
package com.daigua16;
import java.util.List;
import java.util.ArrayList;
/*
* void add(int index, E element) :将元素添加到index索引位置上
E get(int index) :根据index索引获取元素
E remove(int index) :根据index索引删除元素
E set(int index, E element):将index索引位置的的元素设置为element
* */
public class ListDemo1 {
public static void main(String[] args) {
List<String> la = new ArrayList<String>();
la.add("我是你爸爸!");
la.add("1");
System.out.println(la);
System.out.println(la.get(0));
// System.out.println(la.remove(0));
System.out.println(la.set(1, "2"));
System.out.println(la);
}
}
3.2 LinkedList特有功能
LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢
void addFirst(E e) :向链表的头部添加元素
void addLast(E e):向链表的尾部添加元素
E getFirst():获取链头的元素,不删除元素
E getLast():获取链尾的元素,不删除元素
E removeFirst():返回链头的元素并删除链头的元素
E removeLast():返回链尾的元素并删除链尾的元素
代码:
package com.daigua16;
import java.util.LinkedList;
/*
* List的常用子类:
* ArrayList
* 底层是数组结构,查询快,增删慢
* LinkedList
* 底层结构是链表,查询慢,增删快
*
* 如何选择使用不同的集合?
* 如果查询多,增删少,则使用ArrayList
* 如果查询少,增删多,则使用LinkedList
* 如果你不知道使用什么,则使用ArrayList
*
* LinkedList的特有功能:
* void addFirst(E e)
* void addLast(E e)
E getFirst()
E getLast()
E removeFirst()
E removeLast()
*
*/
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList<String> ll = new LinkedList<String>();
ll.add("我是你爸爸");
ll.add("我是你爷爷");
ll.add("我是你奶奶");
System.out.println(ll);
ll.addFirst("我是你妈妈");
System.out.println(ll);
ll.addLast("我是个JB");
System.out.println(ll);
System.out.println(ll.getFirst());
System.out.println(ll.getLast());
ll.removeFirst();
System.out.println(ll);
ll.removeLast();
System.out.println(ll);
}
}
3.3 练习
需求:定义一个方法,返回指定列表中指定元素的索引位置
代码:
package com.daigua16;
import java.util.ArrayList;
import java.util.List;
// 需求:定义一个方法,返回指定列表中指定元素的索引位置
// 判断元素是否存在
public class TestDemo {
public static void main(String[] args) {
List ll = new ArrayList();
ll.add("aa");
ll.add("bb");
ll.add("cc");
ll.add("dd");
System.out.println(getIndex(ll, "bcb"));
System.out.println(isExist(ll, "aa1"));
}
// 第一个参数是List类 第二个参数是Object类,因为java中从集合取出的元素就是Object类
private static int getIndex(List list, Object other) {
for (Object l : list) {
if (l.equals(other)) {
return list.indexOf(other);
}
}
return -1;
}
private static boolean isExist(List list, Object other) {
for (Object l : list) {
if (l.equals(other)) {
return true;
}
}
return false;
}
}