javahigh_cha01
1、对象数组
缺陷:类型固定,长度固定
//objarr.Student@1b6d3586
//objarr.Student 类型
//1b6d3586 地址
//未重写toString方法的类对象,输出对象的类型@地址
//重写了toString方法的类对象,输出toString的返回值
2、泛型
定义:类型参数化
作用域:类级,方法级
缺陷:不能直接实例化(new),不能是基本类型(int,byte,float)
若需要使用基本类型的数据作为泛型元素,则统一使用包装类
boolean
//类:封装
//类方法:逻辑代码封装
//类属性:共享变量封装
//内部类:封装
//匿名内部类:封装(方法级)
class A<T>{
//内部类
class B{}
T[] arr = new T[10]; ❌
public void show(A<T> a){}
}
//基本类型 => 包装类型
//boolean => Boolean
//byte => Byte
//short => Short
//int => Integer ★
//long => Long
//float => Float
//double => Double
//char => Character ★
3、长度固定
代码逻辑,实现了伪动态数组
copy = array;
capacity= (int)Math.ceil((array.length+(capacity-array.length+size))*EXPAND_FACTOR);
array = new Object[capacity];
System.arraycopy(copy,0,array,0,size);
copy = EMPTY;
4、集合框架
Collection:
-
public interface Collection<E> extends Iterable<E> -
不提供此接口的任何直接实现:它提供了更具体的子接口的实现,如
Set和List
List<E> list = Arrays.asList(E...e);//将动态参数封装成List集合
ArratList arr = ...;
ArrayList中重写了toString方法
//新增
arr.add(E e); // 尾部追加
arr.add(int index,E e);//向集合中指定的位置(下标)插入元素
arr.addAll(Collection<E> cs);//尾部追加参数集合
arr.addAll(int index,Collection<E> cs);//向集合中指定位置(下标)插入集合参数
//删除
arr.remove(int index);//删除指定位置(下标)元素
//arr.remove(Object obj);//删除符合参数条件的元素
//equals:Object (==) 比较地址
//override equals 指定的比较规则
arr.removeIf(Predicator<E> filter);//删除满足参数函数条件的元素
//list.removeIf((a) -> a.getName().equals("zl"));//删除姓名位zl的同学
//list.removeIf((a) -> a.getAge()<20);//删除年龄小于20岁的学员
arr.removeAll(Collection<E> cs)//删除参数集合中的元素
//相当于求 arr 相对于 cs 的差集
arr.retainAll(Collection<E> cs)//删除参数集合以外的元素
//相当于求 arr 相对于 cs 的交集
boolean isEmpty = arr.isEmpty();//集合是否为空
int size = arr.size();//提取当前集合中元素的数量
Iterator<E> it = arr.iterator();//获取集合的迭代器对象
arr.clear(); //清空所有元素
List<E> copy = (Lsit<E>)arr.clone();//浅克隆一份集合
boolean has = arr.contains(E e); //是否存在参数元素 e.equals
E e = arr.get(int index);//根据下标提取元素
int index = arr.indexOf(E e);//获取参数元素的位置(下标),不存在返回-1
//左侧第一个
int index = arr.lastIndexOf(E e);//获取参数元素的位置(下标),不存在返回-1
//右侧第一个
arr.set(int index,E e);//替换指定位置(下标)的元素
arr.sort(Comparator<E> e);//根据参数的规则对集合排序
E[] es = arr.toArray(E[] type);//返回参数类型的包含所有元素的数组
arr.trimToSize();//修剪数组长度为元素实际数量
//是否存在重复
//如果是,有几个重复
LinkedList list = ...
LinkedList();
LinkedList(Collection<E> list);
LinkedList: 链表
list.addFirst(E e);//头部追加
list.addLast(E e);//尾部追加
Iterator<E> it = list.decendingIterator();//逆向迭代器
E e = list.getFirst();//提取(但不删除)第一个节点
E e = list.getLast();//提取(但不删除)最后一个节点
E e = list.pollFirst;//提取并删除第一个节点元素
E e = list.pollLast;//提取并删除第一个节点元素
E e = list.removeFirstOccurence(Object obj);//删除第一个匹配节点元素
E e = list.removeLastOccurence(Object obj);//删除最后一个匹配节点元素
E e = list.removeFirst();//删除第一个节点元素,空报异常
E e = list.removeLast();//删除最后一个节点元素,空报异常
Queue:先进先出
list.offer(E e);//入队
E e = list.peek();//提取队头
E e = list.poll();//出队
Stack:后进先出
E e = list.pop; //出栈 <=> pollFirst
list.push(E e);//压栈
HashMap<K,V> map = ...
#Hash碰撞
HashMap();
HashMap(int initialCapacity);
HashMap(Map<K,V> map);
V v = map.put(K key,V value);//添加键值对
//如果k已存在,value覆盖原来键对应的值,并将其返回,不存在返回null
map.putAll(Map<K,V> sub);//添加子Map
V v = map.putIfAbsent(K key,V value); //不存在key添加,否则返回key对应的值
Set<Map.Entry<K,V>> set = map.enrtySet();//提取所有键值对
Set<k> keys = map.keySet();
Collection<V> values = map.values();//提取所有值
V v = map.get(Object key);//根据键提取值
V v = map.getOrDefault(Object key,V defaultValue);//根据键提取值,不存在返回默认值
int size = map.size();//获取键值对的数量
map.clear();//清空
boolean empty = map.isEmpty();//是否为空
boolean has = map.containsKey(Object key);//是否存在键
V v = map.remove(Object key);//根据key删除,存在返回键对应的值,否则返回null
boolean yes = map.remove(Object key,Object value);//键值对都匹配返回true,否则false
boolean yes = map.replace(Object key,Object value,Object newValue);
//如果键值都存在,则替换并返回true,否则返回false
V v = map.replace(Object key,Object value);
//如果键存在,则替换并返回原值,否则返回null

浙公网安备 33010602011771号