Map集合-Properties-泛型
1、Map集合
1.1、Map接口
- TreeMap:判断重复的规则和TreeSet一样
- HashMap:key判断是否重复和HashSet一样:1.hashCode 2.equals()
- HashTable:就是一个安全的HashMap
- LinkedHashMap:就是一个维护了一个链表的HashMap,可以保证存入和取出顺序
- Properties:特殊的HashTable,只不过Key-value都是String类型,一般用来做配置文件
1.2、Map中的重要方法
- 基本方法列表
- Object put(Object key,Object value);//如果添加的key已经存在,会覆盖这个键的值,返回的是之前的value值
- boolean containsKey(Object key);//判断Map集合中是否包含当前传入的key
- boolean containsValue(Object value);//判断Map集合中是否包含当前传入的value
- Object get(Object key);//根据key找对应的值,没有返回null
- remove(Object key);//删除指定key对应的那一对
- 重点方法列表
- Collection values(); //返回一个Map中所有的value值 Collection集合
- Set KeySet(); //返回所有的key值的集合(key只是唯一的,所以返回Set集合)
- Set entrySet(); //返回所有的entry对象(entry 是唯一,所以返回Set集合)
1.3、Map的遍历
- 方式一:先获取完整的键对值,转换为了Set集合 entrySet()
- 方式二:先获取到key的set几何 再由get方法去获取
- 方式三:直接获取到值得集合 返回的是Collection
public class HashMapTest {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap();
map.put("A", 65);
map.put("B", 66);
map.put("c", 120);
map.put("上路英雄", 100);
//第一种遍历方式
Set<Entry<String, Integer>> set = map.entrySet();
for (Entry<String, Integer> e : set) {
System.out.println(e.getKey());
System.out.println(e.getValue());
}
//Set set = map.entrySet();
//set支持增强for和迭代器
/*for (Object obj : set) {
Entry e = (Entry)obj;
System.out.println(e.getKey());
System.out.println(e.getValue());
}*/
/*Iterator it = set.iterator();
while(it.hasNext()){
Object obj = it.next();
Entry e = (Entry)obj;
System.out.println(e.getKey());
System.out.println(e.getValue());
}*/
//第二种遍历方式
Set set = map.keySet();
//System.out.println(set);
/*for (Object obj : set) {
//obj键
System.out.println(obj+"="+map.get(obj));
}*/
/*Iterator it = set.iterator();
while(it.hasNext()){
//必须先获取到键
Object obj = it.next();
System.out.println(obj+"="+map.get(obj));
}*/
//第三种 只获取值
Collection v = map.values();
for (Object obj : v) {
//obj 值
System.out.println(obj);
}
}
}
2、Properties
- 放入Properties中的key-value都是String类型
- Properties的重要方法
- Object setProperty(String key,String value);
- String getProperty(String key);
- String getProperty(String key,String defaultValue);//如果没有找到对应的键值对,返回后面的defaultValue
- void list(PrintStream out); //把Properties中的数据写入磁盘文件
- void load(InputStream inStream);//读取
public static void main(String[] args) throws FileNotFoundException {
//创建了一个集合 元素就是键值对
Properties prop = new Properties();
prop.setProperty("username", "admin");
prop.setProperty("pwd", "111222");
/**
* 参数 PrintStream 流对象
* 创建对象的方法:PrintStream(String fileName)
* fileName:要写入内容的文件所在路径
*/
prop.list(new PrintStream("File/user.properties"));
}
public static void main(String[] args) throws IOException {
//创建了一个集合 元素就是键值对
Properties prop = new Properties();
/**
* load 文件中的数据读取到内存
* void load(InputStream inStream)
从输入流中读取属性列表(键和元素对)。
InputStream 流 读取文件内容
InputStream不能直接使用 因为是一个抽象类
使用的是它的子类:FileInputStream
FileInputStream(String name)
name:文件所在的路劲名称
*/
prop.load(new FileInputStream("File/user.properties"));
System.out.println(prop);
System.out.println(prop.getProperty("username"));
}
3、Collection工具类
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList();
//使用集合的工具类
Collections.addAll(list, 1,123,4,97);
System.out.println(list);
//集合的排序 前提:集合中的数据类型是一致的
//Collections.sort(list);
//System.out.println(list);
ArrayList list1 = new ArrayList();
Collections.addAll(list1, 1,1,11,1,11);
//复制 第一个参数是新集合 第二个是原集合
Collections.copy(list1, list);
System.out.println(list1);
}
4、泛型(generic)
-
语法:集合类型<引用数据类型>
-
概念:简单理解就是约束着某个容器或者对象,只能存储指定的类型对象
-
自定义泛型
E:元素
T:类型
K:键
V:值
R:返回值
-
?:通配符,可以接收任意的类型
-
? extends Number:泛型上线,只能接收Number类型或者Number的子孙类型
-
? super Number:泛型的下线,只能接收Number类型或者Number的祖先类型
public static void main(String[] args) { ArrayList<Integer> list1 = new ArrayList<>(); ArrayList<Object> list2 = new ArrayList<>(); //继承就是上限 get1(list1);//<? extends Number>:最高可以传入的类型是Number及其子类类型 //super就是下限 get2(list2);//<? super Number> :最低可以传入本类类型Number及其父类类型 } public static void get1(ArrayList<? extends Number> list){} public static void get2(ArrayList<? super Number> list){}
-
泛型方法:直接在返回值类型前面加上泛型声明就可以了,注意:如果是静态方法,声明泛型的时候,只能放到方法上面,不能放到类上面