集合不是标准的数据结构:而是java中给我们提供的数据结构;
集合这种数据结构包含了很多的高级操作;
|-Collection
|-List
|-Set
|-Map
|-HashMap
addAll方法,底层是调用的数组的拷贝,把需要追加进来的集合,转换成数组,在对数据进行拷贝;
底层实现: 把ArrayList的内部持有的数组的每个元素置为null
,等待GC回收;然后再把指针定位到开始位置
ArrayList克隆过后的新的集合和原来的集合没有关系了;
底层实现: 遍历内部的数组,逐个进行对比,如果有相同的返回true,反之返回false;
底层实现: 就是数组的拷贝,把内部持有的数组,拷贝成新数组返回;
实现了iterable接口的类是可迭代的类: 就是可以使用增强for循环遍历,和迭代器遍历
Iterator:实现了这个接口的类可以作为一个迭代器(里面提供了一些抽象方法,hasNext,next…)
Comparable:实现了这个接口的类是可以进行比较的类(了解)
Comparator:实现了这个接口的类就是一个比较器
package com.uplooking.demo14;
import java.util.ArrayList;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
Person p1 = new Person("小明1", 20);
Person p2 = new Person("小明2", 30);
Person p3 = new Person("小明3", 40);
Person p4 = new Person("小明4", 15);
ArrayList<Person> personList = new ArrayList<>();
personList.add(p1);
personList.add(p2);
personList.add(p3);
personList.add(p4);
personList.sort(new MyComparator());//传递比较器实现对象的比较
System.out.println(personList);
}
}
//自定义的比较器
class MyComparator implements Comparator<Person> {
@Override
public int compare(Person obj1, Person obj2) {
return obj1.age - obj2.age;//o1-o2:升序 o2-o1:降序
}
}
class Person {
String name;
Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
抄scala这个编程语言中的函数式编程的思想,函数式编程主要应用于分布式计算与大数据并行计算;
package com.uplooking.demo15;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> ages = new ArrayList<>();
ages.add(20);
ages.add(30);
ages.add(40);
ages.add(15);
//Stream流对象 fp(函数式编程)编程 function program
//Stream流后面跟的称为算子(计算法则)
//算子又分为两类: 1>(Action)动作算子 2>非动作算子
ages.stream().forEach(i -> System.out.println(i));
// ages.stream().forEach(System.out::println);
List<Integer> retList = ages.stream().map(i -> 100 + i).filter(i -> i % 2 == 0).collect(Collectors.toList());
System.out.println(retList);
}
}