去除ArrayList中重复字符串元素方式:
需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)
import java.util.ArrayList;import java.util.Iterator;@SuppressWarnings({ "unchecked", "rawtypes" })public class Demo1 {public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("a"); list.add("a"); list.add("b"); list.add("d"); list.add("b"); list.add("c"); list.add("e"); ArrayList newList = getSingle(list); System.out.println(newList); } /** * 创建新集合将重复元素去掉 * 1、明确返回值类型,返回ArrayList * 2、明确参数列表ArrayList * * 分析: * 1、创建新集合 * 2、根据传入的集合(老集合)获取迭代器 * 3、遍历老集合 * 4、通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加 */ public static ArrayList getSingle(ArrayList list) { ArrayList newList = new ArrayList(); // 1、创建新集合 Iterator it = list.iterator(); //2、根据传入的集合(老集合)获取迭代器 while (it.hasNext()) { //3、遍历老集合 Object obj = it.next(); //记录住每一个元素 if (!newList.contains(obj)) { newList.add(obj); } } return newList; }}
去除ArrayList中重复自定义对象元素:
需求:ArrayList去除自定义对象元素的重复值(对象的成员变量值相同)
注意事项:重写equals()方法
package com.list;import java.util.ArrayList;import java.util.Iterator;import com.bean.Person;@SuppressWarnings({ "unchecked", "rawtypes" })public class Demo2 { /** * contains方法判断是否包含,底层依赖的是equals方法 * remove方法判断是否删除,底层依赖的是equals方法 * */ public static void main(String[] args) { ArrayList list = new ArrayList(); //创建集合对象 list.add(new Person("张三",23)); list.add(new Person("李四",23)); list.add(new Person("张三",23)); list.add(new Person("张三",23)); list.add(new Person("李四",23)); list.add(new Person("张三",23)); // ArrayList newList = getSingle(list); //调用方法去除重复// System.out.println(newList); list.remove(new Person("张三",23)); System.out.println(list); } /** * 创建新集合将重复元素去掉 * 1、明确返回值类型,返回ArrayList * 2、明确参数列表ArrayList * * 分析: * 1、创建新集合 * 2、根据传入的集合(老集合)获取迭代器 * 3、遍历老集合 * 4、通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加 */ public static ArrayList getSingle(ArrayList list) { ArrayList newList = new ArrayList(); // 1、创建新集合 Iterator it = list.iterator(); //2、根据传入的集合(老集合)获取迭代器 while (it.hasNext()) { //3、遍历老集合 Object obj = it.next(); //记录住每一个元素 if (!newList.contains(obj)) { newList.add(obj); } } return newList; }}
LinkedList的特有功能:
import java.util.LinkedList;public class Demo3 { public static void main(String[] args) { LinkedList list = new LinkedList(); list.addFirst("a"); list.addFirst("b"); list.addFirst("c"); list.addFirst("d"); list.addLast("e"); // System.out.println(list.getFirst());// System.out.println(list.getLast());// System.out.println(list.removeFirst());// System.out.println(list.removeLast()); System.out.println(list.get(1)); System.out.println(list); }}
栈和队列数据结构:
栈:先进后出
队列:先进先出
用LinkedList模拟栈数据结构的集合并测试:
需求:用LinkedList模拟栈数据结构的集合,并测试
创建一个类将LinkedList中的方法封装
package com.list;import java.util.LinkedList;public class Demo4 { public static void main(String[] args) { //demo1(); Stack s = new Stack(); s.in("a"); //进栈 s.in("b"); s.in("c"); s.in("d"); while (!s.isEmpty()) { System.out.println(s.out()); } } public static void demo1() { //判断栈结构是否为空 LinkedList list = new LinkedList(); list.addLast("a"); list.addLast("b"); list.addLast("c"); list.addLast("d"); while (!list.isEmpty()) { System.out.println(list.removeLast()); } }}
Stack.java
package com.list;import java.util.LinkedList;public class Stack { private LinkedList list = new LinkedList(); /** * 模拟进栈方法 */ public void in(Object obj) { list.addLast(obj); } /** * 模拟出栈 */ public Object out(){ return list.removeLast(); } /** * 模拟栈结构是否为空 */ public boolean isEmpty() { return list.isEmpty(); }}
泛型概述和基本使用:
A:泛型的好处
提高安全性(将运行期的错误转换到编译期)
省去强转的麻烦
B:泛型的基本使用
<>中放的必须是引用数据类型
C:泛型使用的注意事项
前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)
package com.generic;import java.util.ArrayList;import java.util.Iterator;import com.bean.Person;public class Demo1 { public static void main(String[] args) {// demo1(); //int[] arr = new byte[5]; //数组要保证前后的数据类型一样 //ArrayList
ArrayList存储字符串和自定义对象并遍历泛型版:
package com.generic;import java.util.ArrayList;import java.util.Iterator;import com.bean.Person;public class Demo2 { public static void main(String[] args) {// demo1(); ArrayListlist = new ArrayList<>(); list.add(new Person("张三", 23)); list.add(new Person("李四", 24)); list.add(new Person("王五", 25)); list.add(new Person("赵六", 26)); Iterator it = list.iterator(); while (it.hasNext()) { Person p = it.next(); //将集合中的每一个元素用Person记录 System.out.println(p.getName() + "..." +p.getAge()); } } public static void demo1() { ArrayList list = new ArrayList<>(); //创建集合对象 list.add("a"); list.add("b"); list.add("c"); list.add("d"); Iterator it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } }}
增强for的概述和使用:
A:概述
简化数组和Collection集合的遍历
B:格式
for(元素数据类型 变量 :数组或者Collection集合) {
使用变量即可,该变量就是元素
}
C:好处
简化遍历
package com.jdk5;import java.util.ArrayList;import com.bean.Person;public class Demo1 { /** * z增强for循环底层依赖的是迭代器(Iterator) */ public static void main(String[] args) {// demo1(); ArrayListlist = new ArrayList<>(); list.add(new Person("张三",23)); list.add(new Person("李四",24)); list.add(new Person("王五",25)); list.add(new Person("赵六",26)); for (Person person : list) { System.out.println(person); } } public static void demo1() { int[] arr = {11,22,33,44,55}; for(int i : arr){ System.out.println(i); } ArrayList list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); for (String string : list) { System.out.println(string); } }}
ArrayList存储字符串和自定义对象并遍历增强for版:
三种迭代的能否删除:
普通for循环,可以删除,但是索引要--
迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常
增强for循环不能删除
package com.jdk5;import java.util.ArrayList;import java.util.Iterator;public class Demo2 { public static void main(String[] args) { ArrayListlist = new ArrayList<>(); list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("d"); //1、普通for循环删除,索引要-- /*for (int i = 0; i < list.size(); i++) { if ("b".equals(list.get(i))) { list.remove(i--); //通过索引删除元素 } }*/ //2、迭代器删除 /*Iterator it = list.iterator(); while (it.hasNext()) { if ("b".equals(it.next())) { //list.remove("b"); //不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常 it.remove(); } }*/ /*for(Iterator it2 = list.iterator(); it2.hasNext();){ if ("b".equals(it2.next())) { //list.remove("b"); //不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常 it2.remove(); } }*/ //3、增强for循环,不能删除,只能遍历 for (String string : list) { if ("b".equals(string)) { list.remove("b"); } } System.out.println(list); }}
可变参数的概述和使用:
A:概述
定义方法的时候不知道该定义多少个参数
B:格式
修饰符 返回值类型 方法名(数据类型... 变量名){}
C:注意事项
这里的变量其实是一个数组
如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个
package com.jdk5;public class Demo3 { public static void main(String[] args) { int[] arr = {11,22,33,44,55};// print(arr); print(11,22,33,44,55);// print(); } private static void print(int ... arr) { //可变参数其实是一个数组 for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } }}
Arrays工具类的asList()方法的使用:
package com.jdk5;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Demo4 { /** * 数组转换成集合 * 数组转换成集合虽然不能增加或减少元素,但是可以用集合的思想操控数组, * 也就是说可以使用其他集合中的方法 */ public static void main(String[] args) {// demo1();// demo2(); //集合转数组,加泛型 ArrayListlist = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); String[] arr = list.toArray(new String[10]); //当集合转换数组时,数组长度如果是小于等于集合的size时,转换后的数组长度等于集合的size for (String string : arr) { //如果数组的长度大于了size,分配的数组长度就和你指定的长度一样 System.out.println(string); } } public static void demo2() { /*int[] arr = {11,22,33,44,55}; List list = Arrays.asList(arr); //基本数据类型的数组转换成集合,会将整个数组当作一个对象转换 System.out.println(list);*/ Integer[] arr = {11,22,33,44,55}; //将数组转换成集合,数组必须是引用数据类型 List list = Arrays.asList(arr); System.out.println(list); } public static void demo1() { String[] arr = {"a","b","c"}; List list = Arrays.asList(arr); //将数组转换成集合 //list.add("d"); //不能添加 System.out.println(list); }}
集合嵌套之ArrayList嵌套ArrayList:
package com.list;import java.util.ArrayList;import com.bean.Person;public class Demo5 { public static void main(String[] args) { ArrayList> list = new ArrayList<>(); ArrayList first = new ArrayList<>(); first.add(new Person("张三",23)); first.add(new Person("李四",24)); first.add(new Person("王五",25)); ArrayList second = new ArrayList<>(); second.add(new Person("小三",13)); second.add(new Person("小四",14)); second.add(new Person("小五",15)); //将班级添加到学科集合中 list.add(first); list.add(second); //遍历学科集合 for(ArrayList a : list){ for (Person p : a) { System.out.println(p); } } }}