Collection集合概述和使用:
/*
Collection集合概述和使用
是单例集合的顶层接口,表示一组对象,这些对象也称为Collection的元素
提供更具体的子接口(如set / list)实现
Collection<E> E - 此集合中元素的类型
创建Collection集合的对象
多态的方式
ArrayList()
*/
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo1 {
public static void main(String[] args) {
//创建Collection集合的对象
Collection<String> c=new ArrayList<String>();
//添加元素
c.add("a");
c.add("b");
c.add("c");
//输出集合对象
System.out.println(c);
}
}
Collection集合常用方法:
package 集合进阶.Collection单列;
import java.util.ArrayList;
import java.util.Collection;
/*
Collection集合常用方法
boolean add (E e) 添加元素
bollean remove(Object o) 移除指定元素
void clear() 从此集合中删除所有元素(可选操作)
boolean contains(Object o) 如果此集合包含指定的元素,则返回 true 。
boolean isEmpty() 如果此集合不包含元素,则返回 true 。
int size() 返回此集合中的元素数。
*/
public class CollectionDemo2 {
public static void main(String[] args) {
Collection<String> c=new ArrayList<String>();
//添加
System.out.println(c.add("a"));//返回ture,添加元素肯定添加正确所以输出语句没必要写
System.out.println(c.add("b"));
c.add("c");//这样
c.add("d");
//移除
System.out.println(c.remove("a"));//返回ture
System.out.println(c.remove("v"));
c.remove("c");
//清除
// c.clear();
//判断元素存在
System.out.println(c.contains("a"));
//判断集合是否为空
System.out.println(c.isEmpty());
//长度
System.out.println(c.size());
System.out.println(c);
}
}
Collection集合的遍历
Iterator:迭代器,集合的专用遍历方式
package 集合进阶.Collection单列;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*
Collection集合的遍历
Iterator:迭代器,集合的专用遍历方式
常用方法:
boolean hasNext() 如果迭代具有更多元素,则返回 true 。
E next() 返回迭代中的下一个元素。
*/
public class IteratorDemo {
public static void main(String[] args) {
//创建Collection集合的对象
Collection<String> c = new ArrayList<String>();
//添加元素
c.add("a");
c.add("b");
c.add("c");
//通过调用集合的Itertor()方法
Iterator<String> it = c.iterator();
/* System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());*/
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
}
}
并发修改异常
ConcurrentModificationException:
package 集合进阶.Collection单列;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/*
并发修改异常
ConcurrentModificationException
产生原因
迭代器遍历过程中,通过集合对象修改了集合中的元素长度,
造成了迭代器获取元素中判断预期修改值和实际修改值不一致
解决方案
用for循环遍历,然后用集合对象做对应的操作即可
*/
public class 并发修改异常 {
public static void main(String[] args) {
//创建集合对象
List<String> list = new ArrayList<String>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
//遍历集合,得到每一个元素,看有没有“world”这个元素,如果有,我就添加一个“javaee”元素
/* Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
if (s.equals("world")) {
list.add("javaee");
}
}*/
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
if (s.equals("world")) {
list.add("javaee");
}
}
System.out.println(list);
}
}
List集合概述和特点:
package 集合进阶.Collection单列.List;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/*
概述:
有序集合,用户可以精确控制每个元素的插入位置,用户也可以通过整数索引访问元素
并搜集列表中的元素
与Set集合不同,列表通常允许重复元素
特点:
有序:存储和取出的元素一致
可重复:存储的元素可以重复
*/
public class List集合概述和特点 {
public static void main(String[] args) {
//创建集合对象
List<String> list = new ArrayList<String>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
list.add("world");
// //输出集合
// System.out.println(list);
//迭代器的方式遍历
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
}
}
List集合特有方法:
package 集合进阶.Collection单列.List;
/*
void add(int index,E element) 在此集合的指定位置插入指定元素
E remove(int index) 删除指定索引处的元素,并返回
E set(int index,E element) 修改并返回
E get(int index) 返回
*/
import java.util.ArrayList;
import java.util.List;
public class LIst集合特有方法 {
public static void main(String[] args) {
//创建集合对象
List<String> list = new ArrayList<String>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
//插入
// list.add(1,"javaee");
// list.add(11,"javaeee");//IndexOutOfBoundsException
//删除
// list.remove(1);
// System.out.println(list.remove(1));
// System.out.println(list.remove(11));//IndexOutOfBoundsException
//修改
// list.set(1,"javaee");
// System.out.println(list.set(1,"javaee"));
// System.out.println(list.set(11,"javaeee"));//IndexOutOfBoundsException
//返回
System.out.println(list.get(0));
// System.out.println(list.get(11));//IndexOutOfBoundsException
//输出集合
System.out.println(list);
}
}
List集合子类的特点:
package 集合进阶.Collection单列.List;
import java.util.ArrayList;
import java.util.LinkedList;
/*
常用子类:
ArrayList:底层数据结构是数组,查询快,增删慢
LinkedList:底层数据结构是链表,查询慢,增删快
*/
//完成存储字符串并遍历
public class List集合子类的特点 {
public static void main(String[] args) {
//创建集合对象ArrayList
ArrayList<String> array = new ArrayList<String>();
array.add("hello");
array.add("world");
for(String s : array) {
System.out.println(s);
}
//LinkedList
LinkedList<String> list = new LinkedList<String>();
list.add("hello");
list.add("world");
for(String s : list) {
System.out.println(s);
}
}
}
增强for:
package 集合进阶.Collection单列.List;
/*
增强for:简化数组和Collection集合的遍历
实现Iterable接口的类允许其对象成为增强型for语句的目标
它是JDK5之后出现的,其内部原理是一个Iterator迭代器
格式:
for(元素数据类型 变量名:数组或者Collection集合){
//在此处使用变量即可,该变量就是元素
}
范例:
int[] arr={1,2,3,4}
for(int i:arr){
sout(i);
}
*/
import java.util.ArrayList;
import java.util.List;
public class 增强for {
public static void main(String[] args) {
int[] arr ={1,2,3,4};
for(int i:arr){
System.out.println(i);
}
String[] strArray={"hello","world","java"};
for(String s:strArray){
System.out.println(s);
}
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
list.add("java");
for(String s:list){
System.out.println(s);
}
//内部原理是一个Iterator迭代器
for(String s:list){
if(s.equals("world")){
list.add("java");//ConcurrentModificationException
}
}
}
}
ListIterator:列表迭代器
package 集合进阶.Collection单列.List;
/*
ListIterator:列表迭代器
通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器
用于允许程序员沿任意方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置
ListIterator中的常用方法
E next() 返回迭代中的下一个元素
boolean hasNext() 如果迭代具有更多的元素,则返回true
E previous() 返回列表的上一个元素
boolean hasPrevious() 如果此列表迭代器在相反的方向遍历列表是具有更多的元素,则返回true
void add(E e) 将指定的元素插入列表
*/
import java.util.ArrayList;
import java.util.List;
public class ListIterator {
public static void main(String[] args) {
//创建集合对象
List<String> list = new ArrayList<String>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
//通过list集合的ListIterator()方法得到
/* java.util.ListIterator<String> lit = list.listIterator();
while (lit.hasNext()) {
String s = lit.next();
System.out.println(s);
}
while (lit.hasPrevious()){
String s=lit.previous();
System.out.println(s);
}*/
//获取列表迭代器
java.util.ListIterator<String> lit = list.listIterator();
while (lit.hasNext()) {
String s = lit.next();
if (s.equals("world")){
lit.add("javaee");
}
}
System.out.println(list);
}
}
LinkedList集合特有功能:
package 集合进阶.Collection单列.List;
/*
void addFirst(E e) 在该列表开头插入指定的元素。
void addLast(E e) 将指定的元素追加到此列表的末尾。
E getFirst() 返回此列表中的第一个元素。
E getLast() 返回此列表中的最后一个元素。
E removeFirst() 从此列表中删除并返回第一个元素。
E removeLast() 从此列表中删除并返回最后一个元素。
*/
import java.util.LinkedList;
public class LinkedList集合特有功能 {
public static void main(String[] args) {
//创建集合对象
LinkedList<String> LinkedList = new LinkedList<String>();
LinkedList.add("hello");
LinkedList.add("world");
LinkedList.add("java");
LinkedList.addFirst("javaee");
LinkedList.addLast("javase");
LinkedList.getFirst();
LinkedList.getLast();
System.out.println(LinkedList.removeFirst());
System.out.println(LinkedList.removeLast());
System.out.println(LinkedList);
}
}
List集合存储学生对象并遍历:
package 集合进阶.Collection单列.List.List集合存储学生对象并遍历;
public class Student {
String name;
int age;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
package 集合进阶.Collection单列.List.List集合存储学生对象并遍历;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/*
思路:
定义学生类
创建集合对象
创建学生对象
添加学生到集合
遍历集合
*/
public class ListDemo {
public static void main(String[] args) {
//创建集合对象List
List<Student> list = new ArrayList<Student>();
Student s1=new Student("程序员1",30);
Student s2=new Student("程序员2",31);
Student s3=new Student("程序员3",32);
list.add(s1);
list.add(s2);
list.add(s3);
Iterator<Student> it = list.iterator();
while (it.hasNext()) {
Student s = it.next();
System.out.println(s.getName()+","+s.getAge());
}
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
System.out.println(s.getName()+","+s.getAge());
}
}
}