开发语言
通过对比不同开发语言的特性,了解各个语言的特质以及共通之处,有效和适当的采用相应的开发语言和开发技巧
Python
基本内容: 键不可重复且必须是可hash的 凡是可变对象都不可以做字典的key
1.定义 dict() 或者 {}
2. keys values() items()
3. [] get 字典的pop方法
新的索引键并为其赋值,可以将项目添加到字典中。一对中括号紧跟在字典后面,中括号里写key,等号右侧写value
pop() 方法删除具有指定键名的项: popitem() 方法删除最后插入的项目(在 3.7 之前的版本中,删除随机项目)
# 两个输入参数式当key不存在时,pop方法会返回这个默认值,如果是只有一个输入参数则当key不存在时,程序会报错
print(student.pop('score', 50))
clear() 关键字清空字典:
setdefault() 返回指定键的值。如果该键不存在,则插入具有指定值的键。
update() 使用指定的键值对字典进行更新
def statis_col_2(a):
d = dict()
for sig in a:
d[sig] = d.get(sig, 0)+1
print(d)
return d
4.初始化 for sigle_example in dict_example: 以及 multidict 和赋初值
想要一个键映射多个值,将这多个值放到另外的容器中, 比如列表或者集合里面
d = {'a': [1, 2, 3]}
# 列表和元组的组合
pairs = [("a", 'Spring'), (1, 'Summer'), (1, 'Fall'), (3, 'Winter')]
for key, value in pairs:
if key not in d:
d[key] = []
d[key].append(value)
print(d)
另外的写法
pairs = [("a", 'Spring'), (1, 'Summer'), (1, 'Fall'), (3, 'Winter')]
f_dict = dict()
for key_cd, value_cd in pairs:
data = f_dict.get(key_cd)
if data is None:
f_dict[key_cd] = []
f_dict[key_cd].append(value_cd)
print("$##########",f_dict)
5.内置函数:
len()
del score_dict['示例'] del 关键字删除具有指定键名的项目: del 关键字也可以完全删除字典:
in 或者not in 成员操作符
内建函数 next(iterator)
6 迭代器 Python里的迭代器并没有提供类似has_next() Python的做法有一些利用异常进行流程控制的嫌疑
Python专门将关键字for用作了迭代器的语法糖
s = {'one':1,'two':2,'three':3}
m = iter(s)
while True:
try:
print (next(m))
except StopIteration:
print("##")
break
内置了一个模块itertools
7.顺序
python中字典的各项的顺序是随机的
collections 模块中的 OrderedDict 类。 在迭代操作的时候它会保持元素被插入时的顺序
使用 zip() 和 sorted() 函数来排列字典数据 rices_sorted = sorted(zip(prices.values(), prices.keys())) 注意: zip() 函数创建的是一个只能访问一次的迭代器
Java
1.定义: HashMap TreeMap LinkedHashMap
2. keySet values entrySet
3. put get remove size
getOrDefault Map集合中有这个key时,就使用这个key值,如果没有就使用默认值defaultValue
4.遍历
01.for循环的形式
for (Entry<String, String> entry : map.entrySet()) {}
02.Iterator 迭代器的形式
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey(); }
5. 初始化
import java.util.*;
public class TraversalInit {
public static void main(String [] args) {
//创建List 对象
List<String> arrayList = new ArrayList<String>();
arrayList.add("aaa");
arrayList.add("ccc");
arrayList.add("fff");
//01.创建Map对象
Map<String, String> systemNote = new HashMap<>();
//1.创建Map对象
Map<String, String> TestMap = new HashMap<>();
if (arrayList != null && !arrayList.isEmpty()) {
for (String row : arrayList) {
// 02. 使用get获取数据然后判断是否是null值
// get()方法的返回值为null时,可能有两种情况,一种是在集合中没有该键对象,
// 另一种是该键对象没有映射任何值对象,即值对象为null
String dataNote = systemNote.get(row);
if (dataNote == null) {
dataNote = "aaaa";
// 03. null值情况下,添加数据
systemNote.put(row, dataNote);
}
// 2. 使用 containsKey 判断是否是包含
if (!TestMap.containsKey(row)) {
// 3. 不在内的情况下,添加数据
TestMap.put(row, "bcdfg");
}
//04.循环结束,初始化完成
}
}
// 遍历的两种方式 1.for循环的形式
for (Map.Entry<String, String> entry : systemNote.entrySet()) {
System.out.println(entry.getKey()+": " +entry.getValue());
}
// 遍历的两种方式 2.迭代器的形式
Iterator iter = TestMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
System.out.println(entry.getKey()+"## " +entry.getValue());
} } }
6.注意: java的HashMap的key为对象 key是自定义类,要重写对象的两个方法 Map<String, Instance>
顺序:
HashMap 没有顺序-随机
TreeMap Key的 自然顺序
LinkedHashMap Key的 插入顺序迭代
Key值和Value值
HashMap key和value都允许为空 key可以有一个键为null, value可以有无数个值为null
LinkedHashMap key和value都允许为空
TreeMap key不可以为NULL, Value可以为NULL
ConcurrentHashMap key和value键和值 不能 有null
HashMap就是通过对象的= hashCode() 和 equals 判定是否为同一个key,重写这两个方法
7.源码以及
java.util.Iterator;
package java.util;
public interface Iterator<E> {
boolean hasNext();
E next();
void remove(); }
重写 equals() 和 hashCode()
01.重写 equals()
默认的equals()实际是判断两个引用是否指向内在中的同一个对象,相当于 == .
重写时要遵循以下三步:
1. 判断是否等于自身.
if(other == this)return true;
2. 使用instanceof运算符判断 other 是否为Coder类型的对象.
if(!(other instanceof Coder))return false;
3. 比较Coder类中你自定义的数据域,name和age,一个都不能少.
Coder o = (Coder)other; return o.name.equals(name) && o.age == age;
02.重写hashcode()
要保证Coder对象中所有的成员都能在hashCode中得到体现
result = result * 31 + name.hashCode();
result = result * 31 + age;
return result;
HashMap 默认值 capacity 16 load Factory 0.75 threshold = loadFactor * capacity。
元素个数(size)超过临界值(threshold)时就会自动扩容
参考
参考<Cookbook>