1.定义一个Collection类型的集合,存储以下字符串:
“JavaEE企业级开发指南”,
“Oracle高级编程”,
“MySQL从入门到精通”,
“Java基础教程”
完成以下功能
1.删除书名字符小于10个的元素,并打印
2.打印书名中包含“Java”的元素
public class Demo5 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("JavaEE企业级开发指南");list.add("Oracle高级编程");list.add("MySQL从入门到精通");list.add("Java基础教程");//打印书名中包含“Java”的元素for (int i = 0; i < list.size(); i++) {if (list.get(i).contains("Java")) {System.out.println(list.get(i));}}System.out.println("---------------------");//删除书名字符小于10个的元素,并打印删除元素for (int i = 0; i < list.size(); i++) {if(list.get(i).length()<10){String s = list.remove(i);System.out.println(s);}}System.out.println("---------------------");//删除书名字符小于10个的元素,并打印删除后集合list.removeIf(s -> {return s.length() < 10;});for (String s : list) {System.out.println(s);}}
}打印结果:
------------------------------------------------------
JavaEE企业级开发指南
Java基础教程
---------------------
Java基础教程
---------------------
JavaEE企业级开发指南
Oracle高级编程
MySQL从入门到精通
2.元素删除
删除元素“bbb"【两种方式用其一】
public class Demo2 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("aaa");list.add("bbb");list.add("bbb");list.add("ccc");list.add("ddd");//方法一:迭代器删除Iterator<String> it = list.iterator();while (it.hasNext()){String s = it.next();if("bbb".equals(s)){it.remove();//迭代器遍历元素时,集合不能参入其中//所以不能用集合的删除方法,否则出现并发修改异常}}System.out.println(list);---------------------------------------------------------------//方法二:集合删除for (int i = 0; i < list.size(); i++) {if("bbb".equals(list.get(i))){list.remove(list.get(i));i--;//由于删除后,集合后面的元素索引会+1,避免删除元素连续错过}}System.out.println(list);}
}
3.自定义集合【用于面试】
实现增删改查功能,实现迭代器超级接口
public class Test3 {public static void main(String[] args) {MyList<String> myList = new MyList<>();myList.add("hello");myList.add("world");myList.add("java");Iterator it = myList.iterator();while (it.hasNext()){Object o = it.next();System.out.println(o);}}
}//实现此接口允许对象成为“for-each loop”语句的目标
class MyList<T> implements Iterable {//数组用于存储元素private Object[] array = {};//集合的长度private int size = 0;//初始化长度,默认为10个元素public MyList() {array = new Object[10];}//添加元素public void add(T t) {//1.先记录添加元素的位置int index = size;//2.判断这个位置的是否可以添加元素if (index >= array.length) {//如果不能添加了,则将数组长度变成1.5倍,右移的优先级比加减法更低Object[] newArray = new Object[array.length + (array.length >> 1)];//再将原数组的元素复制到新数组中System.arraycopy(array, 0, newArray, 0, size);//把新数组的地址值重新赋值给原数组array = newArray;}//没满,则添加元素array[index] = t;size++;}//修改元素public void set(int index, T t) {//先判断索引是否越界,如果是,就抛出异常if (index >= size) {throw new IndexOutOfBoundsException(index + "索引越界了");}//否则返回数组中的index位置的元素array[index] = t;}//获取元素public Object get(int index) {//先判断索引是否越界,如果是,就抛出异常if (index >= size) {throw new IndexOutOfBoundsException(index + "索引越界了");}//否则返回该元素return array[index];}//删除元素public void delete(int index) {//先判断索引是否越界,如果是,就抛出异常if (index >= size) {throw new IndexOutOfBoundsException(index + "索引越界了");}//否则删除该元素array[index] = null;/*for (int i = index; i < array.length - 1; i++) {array[i] = array[i + 1];}//最后一个元素需要置空array[array.length-1]=null;*/for (int i = index; i < size; i++) {array[i] = array[i + 1];}size--;}//获取长度public int size() {return size;}//遍历方法public void printMyList() {for (Object o : array) {if (o != null) {System.out.println(o);}}}//迭代器public Iterator iterator() {return new Ttr();}//自定义迭代器类class Ttr<T> implements Iterator<T> {//从0索引开始,往后面一个一个的获取元素int index = 0;@Overridepublic boolean hasNext() {return array[index] != null;}@Overridepublic T next() {//获取当前元素T e = (T) array[index];index++;return e;}}
}打印结果:
-----------------------------------------------------------
hello
world
java