• 今天已经完成了哈希表的经典题目,就先总结一波。
  • 数据结构
    数组、set、map这三个是常用的。
    并且他们的区别也是非常明显,set不会存重复的值,map是键值对,但是它的问题是相同的key不同的 value值会被覆盖掉,需要理解map的内涵,重写equals和hashcode函数,从而可以使其不覆盖原来的值。
    使用map虽然很多时候很方便,但是在一定量的数据上它还是比较耗时,在jdk1.8开始HashMap底层使用了红黑树,它需要维护一个树,自然开销要大一点。有时在可行的情况下,我们会使用数组来代替Map。
  • 常用技巧
// 排序
Arrays.sort(arrName);

// 数组转List
Arrays.asList(arrName);
// List转数组
String[] str = listStrings.toArray(new String[listStrings.size()]);

// 取String的每个字符
str.charAt(index);	// str是字符串,index是索引
// String转字符数组
char[] arr = str.toCharArray();
// 字符转字符串
String s = String.valueOf('c');

// map的常用方法
**方法**				**描述**
clear()				删除 hashMap 中的所有键/值对
clone()				复制一份 hashMap
isEmpty()			判断 hashMap 是否为空
size()				计算 hashMap 中键/值对的数量
put()				将键/值对添加到 hashMap 中
putAll()			将所有键/值对添加到 hashMap 中
remove()			删除 hashMap 中指定键 key 的映射关系
containsKey()		检查 hashMap 中是否存在指定的 key 对应的映射关系。
containsValue()		检查 hashMap 中是否存在指定的 value 对应的映射关系。
replace()			替换 hashMap 中是指定的 key 对应的 value。
replaceAll()		将 hashMap 中的所有映射关系替换成给定的函数所执行的结果。
get()				获取指定 key 对应对 value
getOrDefault()		获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
forEach()			对 hashMap 中的每个映射执行指定的操作。
entrySet()			返回 hashMap 中所有映射项的集合集合视图。
keySet()			返回 hashMap 中所有 key 组成的集合视图。
values()			返回 hashMap 中存在的所有 value 值。
merge()				添加键值对到 hashMap 中
compute()			对 hashMap 中指定 key 的值进行重新计算

// set的常用方法
add()				添加元素
contains()			判断元素是否存在
remove()			删除元素
clear()				删除所有元素
size()				计算大小
遍历元素 
HashSet<String> sites = new HashSet<String>();
for (String i : sites) {
    System.out.println(i);
}

// 数组的拷贝
深拷贝:拷贝的是实际空间中的内容。改变新的数组中的值,不会影响原数组。
浅拷贝:只是拷贝的是引用(可以简单理解为就是将引用的地址复制过来了)。改变新的数组的值,会改变原数组的值,因为他们实际上指向同一个内存空间。

深拷贝方法:
arr.clone()

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src:源数组; srcPos:源数组要复制的起始位置;
dest:目的数组; destPos:目的数组放置的起始位置;
length:复制的长度.
调用方式:System.arraycopy(arr, 0, dest, 0, dest.length);
注意: 一维数组下的深拷贝在 多维数组 只是浅拷贝!!

// == 和 equals()
对于基本类型,如int, char等,==就是比较的实际内容。
但是,对于引用类型,如Integer, String等,==比较的是引用地址,而不是实际的内容。
此时就要用equals()去比较实际的内容。
  • 开始今天的题目
class Solution {
    public void reverseString(char[] s) {
        char t;
        int i = 0, j = s.length - 1;
        while (i < j) {
            t = s[i];
            s[i] = s[j];
            s[j] = t;
            i++;
            j--;
        }
    }
}

java替换map值 替换list map中某些key的值_算法