集合
- 集合類存放于java.util包中态罪。
集合類存放的都是對象的引用噩茄,而非對象本身。 - 集合類型主要有3種:set(集)复颈、list(列表)和map(映射)绩聘。
- 集合接口分為:Collection和Map,list耗啦、set實現(xiàn)了Collection接口
Collection抽象接口
定義集合的相關操作
List接口 列表 數(shù)組 特點:有序 可重復
ArrayList
LinkedArrayList
Set集合 特點:無序 不重復
Map接口
映射關系 Key-Value 鍵值對 鍵不能相同
Collection接口的方法
Collection<String> text = new ArrayList();
text.add("Jack");
text.add("Merry");
System.out.println(text);
//刪除一個對象
text.remove("Jack");
System.out.println(text);
//獲取元素個數(shù)
System.out.println(text.size());
//判斷是否包含一個元素
if(text.contains("Merry")){
System.out.println("有");
}else{
System.out.println("無");
}
//判斷是否為空
if(text.isEmpty()){
System.out.println("kon");
}
//判斷兩個集合是否相同
Collection<String> t2 = new ArrayList<>();
t2.add("Jack");
t2.add("Merry");
if(text.equals(t2)){
System.out.println("相同");
}else{
System.out.println("不同");
}
//清空
text.clear();;
System.out.println(text);
集合的遍歷
//1.使用Iterator來遍歷
//hasNext 判斷是否有對象
//next 獲取下一個對象
//remove 刪除當前遍歷過后的對象
Iterator iterator = t2.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
//2.for-each
for(String obj: t2){
System.out.println(obj);
}
//3.for - i
for(int i = 0; i < t2.size(); i++){
System.out.println(t2);
}
List接口 extends Collection
//ArrayList
//LinkedArrayList
//集合里面只能存放對象
//自動將基本數(shù)據(jù)類型包裝為對應的類
ArrayList<Integer> score = new ArrayList<>();
score.add(2);
score.add(3);//在末尾添加
score.add(0,1);//在指定位置插入
System.out.println(score);
//訪問指定元素
score.get(1);
//修改一個元素
score.set(0,0);
System.out.println(score);
//刪除
score.remove(0);//刪除指定位置的元素
System.out.println(score);
score.remove((Integer) 2); //刪除指定的對象
System.out.println(score);
score.clear();//刪除所有 清空
System.out.println(score);
ArrayList<Integer> a2 = new ArrayList<>();
a2.add(1);
a2.add(2);
a2.add(3);
//將另外一個集合里面的內(nèi)容添加到當前集合中
score.addAll(a2);
System.out.println(score);
ArrayList<Integer> a3 = new ArrayList<>();
a3.add(1);
a3.add(2);
score.retainAll(a3);//取兩個集合的交集
System.out.println(score);
//訪問某個對象在集合里面的索引
ArrayList<Integer> a4 = new ArrayList<>();
a4.add(1);
a4.add(2);
a4.add(2);
a4.add(1);
System.out.println(a4.indexOf(1));
System.out.println(a4.lastIndexOf(1));
//將ArrayList 轉化為普通數(shù)組
Integer[] objects = new Integer[a4.size()];
a4.toArray(objects);
a4.toArray(objects);
for(Integer i:objects){
System.out.println(i);
}
Object[] objects1 = a4.toArray();
for(Object i: objects1){
System.out.println(1);
}
Iterator iterator = a4.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
//獲取集合某個范圍的子集合
List<Integer> integers = a4.subList(1,2);
System.out.println(integers);
ArrayList<Integer> nums=new ArrayList<>();
nums.add(1);
nums.add(2);
nums.add(3);
nums.add(4);
//Lambda表達式
//nums.removeIf(obj->obj%2==0);
for(Integer obj:nums){
if(obj%2==0){
nums.remove(obj);
}
}
for(int i=0;i<nums.size();i++){
Integer obj=nums.get(i);
if(obj%2==0){
nums.remove(i);
i--;
}
}
System.out.println(nums);
閉包
enclusure 把函數(shù)作為一個方法的參數(shù)
class ArrayClass{
public void test(int[] target, Show s){
for (int element: target){
s.customShow(element);
}
}
}
//必須是接口 這個接口里面只有一個方法
interface Show{
void customShow(int element);
}
class PXDClass implements Show{
@Override
public void customShow(int element) {
System.out.println(element);
}
}
//1.使用方式: 定義一個類實現(xiàn)接口
// ArrayClass ac = new ArrayClass();
// int[] num = {1,2,3,4,5,6};
// PXDClass pc = new PXDClass();
// ac.test(num, pc);
//2.使用匿名類
// ArrayClass ac = new ArrayClass();
// int[] num = {1,2,3,4,5,6};
// ac.test(num, new Show() {
// @Override
// public void customShow(int element) {
// System.out.println(element);
// }
// });
//3. 使用Lambda表達式
//如果參數(shù)是一個接口類對象君纫,且接口里面只有一個方法
//可以省略方法名
// ArrayClass ac = new ArrayClass();
//// int[] num = {1,2,3,4,5,6};
//// ac.test(num, (int element) -> {
//// System.out.println(element);
//// });
體會
今天的內(nèi)容超級無敵枯燥,人超級困