目录
1️⃣数组和集合的区别❓
2️⃣集合的体系特点
①集合的体系结构️️️️️️️️️
3️⃣集合常用API
4️⃣集合的遍历方式
①迭代器
②增强for循环
③lanbda表达式
5️⃣Collection存储自定义类型对象
6️⃣List系类集合
①✨✨List集合特有的方法:
②List遍历方式小结
③LinkedList的特点
7️⃣泛型深入
Ⅰ自定义泛型类 :修饰符 class 类名 <泛型变量> {}
编辑
Ⅱ自定义泛型方法
Ⅲ自定义泛型接口
1️⃣数组和集合的区别❓
⬛存储元素个数问题:
数组定义后类型固定,长度固定
集合类型可以不固定,大小可变
⬛数组和集合存储元素类型的问题:
数组可以存储基本类型和引用类型
集合只能存储引用类型
2️⃣集合的体系特点
①集合的体系结构️️️️️️️️️
package com.study.d1_collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
public class CollectionDemo {
public static void main(String[] args) {
//有序 可重复 有索引
Collection list = new ArrayList();
list.add("java");
list.add("java");
list.add("哇哈哈");
list.add(11);
list.add(false);
System.out.println(list);
//无序 不重复 无索引
Collection list1 = new HashSet();
list1.add("java");
list1.add("java");
list1.add("哇哈哈");
list1.add(11);
list1.add(false);
System.out.println(list1);
System.out.println("-------------------");
Collection list2 = new ArrayList<>();
Collection list3 = new ArrayList<>();
list2.add("heheh");
list3.add(11);
}
}
注意:集合支持泛型
Collection
3️⃣集合常用API
package com.study.d2_collection_api;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Objects;
public class CollectionApi {
public static void main(String[] args) {
Collection list = new ArrayList();
// public boolean add(E e) 把给定的对象添加到当前集合中
list.add("java");
list.add("java");
list.add("html");
list.add("呵呵");
System.out.println(list);
// public void clear() 清空集合中所有的元素
//list.clear();
// public boolean remove(E e) 把给定的对象在当前集合中删除
System.out.println(list.remove("java"));
// public boolean contains(Object obj) 判断当前集合中是否包含给定的对象
System.out.println(list.contains("java"));
// public boolean isEmpty() 判断当前集合是否为空
System.out.println(list.isEmpty());
// public int size() 返回集合中元素的个数。
System.out.println(list.size());
// public Object[] toArray() 把集合中的元素,存储到数组中
Object[] arrs = list.toArray();
System.out.println(Arrays.toString(arrs));
System.out.println("-------------");
Collection a1 = new ArrayList<>();
Collection a2 = new ArrayList<>();
a1.add("java1");
a1.add("java2");
a2.add("哇哈哈");
a2.add("哇哈哈haha");
a1.addAll(a2);
System.out.println(a1);
System.out.println(a2);
}
}
4️⃣集合的遍历方式
①迭代器
package com.study.d3_collection_bianli;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo1 {
public static void main(String[] args) {
Collection list = new ArrayList<>();
list.add("可乐");
list.add("雪碧");
list.add("七喜");
list.add("芬达");
System.out.println(list);
//得到当前集合的迭代器对象
Iterator it = list.iterator();
// System.out.println(it.next()); // 先取元素 再向后移动
// System.out.println(it.next()); // 先取元素 再向后移动
// System.out.println(it.next()); // 先取元素 再向后移动
// System.out.println(it.next()); // 先取元素 再向后移动
//利用while循环
while (it.hasNext()){ //hasNext判断当前位置是否有元素
System.out.println(it.next());
}
}
}
②增强for循环
package com.study.d3_collection_bianli;
import java.util.ArrayList;
import java.util.Collection;
public class Collectionfor {
public static void main(String[] args) {
Collection list = new ArrayList<>();
list.add("可乐");
list.add("雪碧");
list.add("七喜");
list.add("芬达");
System.out.println(list);
for (String s : list) { //list.for 回车
System.out.println(s);
}
}
}
③lanbda表达式
package com.study.d3_collection_bianli;
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
public class Collectionlambda {
public static void main(String[] args) {
Collection list = new ArrayList<>();
list.add("可乐");
list.add("雪碧");
list.add("七喜");
list.add("芬达");
System.out.println(list);
// list.forEach(new Consumer() {
// @Override
// public void accept(String s) {
// System.out.println(s);
// }
// });
// list.forEach(s-> {
// System.out.println(s);
// });
list.forEach(s-> System.out.println(s));
}
}
5️⃣Collection存储自定义类型对象
Collection movies = new ArrayList<>();
movies.add(new Movie("《你好李焕英》",9.6,"贾玲"));
movies.add(new Movie("《我和我我的祖国》",9.8,"武警"));
movies.add(new Movie("《你好李焕英2》",9.0,"张三"));
for (Movie movie : movies) {
System.out.println("片名"+ movie.getName());
System.out.println("得分"+ movie.getScore());
System.out.println("主演"+ movie.getActor());
}
定义一个movie类
package com.study.d4_collection_object;
public class Movie {
private String name;
private double score;
private String actor;
public Movie() {
}
public Movie(String name, double score, String actor) {
this.name = name;
this.score = score;
this.actor = actor;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
@Override
public String toString() {
return "Movie{" +
"name='" + name + ''' +
", score=" + score +
", actor='" + actor + ''' +
'}';
}
}
6️⃣List系类集合
①✨✨List集合特有的方法:
package com.study.d5_collection_list;
import java.util.ArrayList;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("java");
list.add("java");
list.add("mysql");
list.add("mysql");
//在某个位置利用索引添加元素
list.add(2,"html");
System.out.println(list);
System.out.println("-----------");
//根据索引删除元素
System.out.println(list.remove(0)); //返回被删除元素
System.out.println(list);
System.out.println("-------------");
//根据索引取元素
System.out.println(list.get(2));
//修改碎银出的元素值
System.out.println(list.set(0, "哇哈哈")); //返回修改前的数据
}
}
②List遍历方式小结
迭代器,增强for循环,lambda表达式,for循环(List集合存在索引)
package com.study.d6_colllection_update_delete;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Test {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("哇哈哈");
list.add("java");
list.add("java");
list.add("张三");
list.add("张三");
list.add("里斯");
System.out.println(list);
//[哇哈哈, java, java, 张三, 张三, 里斯]
//删除所有的Java
//利用迭代器
// Iterator it = list.iterator();
// while (it.hasNext()){
// String ele = it.next();
// if ("java".equals(ele)){
// it.remove(); //利用迭代器删除当前元素并且不会后移
// }
// }
// System.out.println(list);
//
//利用for增强 无法解决
// for (String s : list) {
// if ("java".equals(s)){
// list.remove("java");
// }
// }
//lambda表达式 也不可以
// list.forEach(s -> {
// if ("java".equals(s)){
// list.remove("java");
// }
// });
//for循环不出Bug 但是会漏删除
// for (int i = 0; i < list.size(); i++) {
// String ele = list.get(i);
// if ("java".equals(ele)){
// list.remove("java");
// i--;
// }
// }
// System.out.println(list);
//for循环倒着删除
for (int i = list.size() - 1; i > 0; i--) {
String ele = list.get(i);
if ("java".equals(ele)){
list.remove("java");
}
}
System.out.println(list);
}
}
③LinkedList的特点
底层数据结构是双链表,查询慢,但是首尾的操作速度是非常快的
7️⃣泛型深入
Ⅰ自定义泛型类 :修饰符 class 类名 <泛型变量> {}
public class MyArrayList
注意:变量可以为T E K V D等
public class MyArrayList{ public void add(E e){ }
Ⅱ自定义泛型方法
package com.study.d8_fanxing_method;
public class FanxingDemo {
public static void main(String[] args) {
String[] names = {"小明","小路","小河"};
printArray(names);
Integer[] ages = {10,20,30};
printArray(ages);
Integer[] ages2 = getArr(ages);
}
//泛型方法
public static T[] getArr(T[] arr){
return arr;
}
public static void printArray(T[] arr){
if ( arr != null){
StringBuilder sb = new StringBuilder("["); //拼接
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]).append(i == arr.length - 1? "":",");
}
sb.append("]"); //append添加元素
System.out.println(sb);
}else {
System.out.println(arr);
}
}
}
Ⅲ自定义泛型接口



