map+泛型

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中的重要方法

  • 基本方法列表
  1. Object put(Object key,Object value);//如果添加的key已经存在,会覆盖这个键的值,返回的是之前的value值
  2. boolean containsKey(Object key);//判断Map集合中是否包含当前传入的key
  3. boolean containsValue(Object value);//判断Map集合中是否包含当前传入的value
  4. Object get(Object key);//根据key找对应的值,没有返回null
  5. remove(Object key);//删除指定key对应的那一对
  • 重点方法列表
  1. Collection values(); //返回一个Map中所有的value值 Collection集合
  2. Set KeySet(); //返回所有的key值的集合(key只是唯一的,所以返回Set集合)
  3. 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的重要方法
  1. Object setProperty(String key,String value);
  2. String getProperty(String key);
  3. String getProperty(String key,String defaultValue);//如果没有找到对应的键值对,返回后面的defaultValue
  4. void list(PrintStream out); //把Properties中的数据写入磁盘文件
  5. 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){}
    
  • 泛型方法:直接在返回值类型前面加上泛型声明就可以了,注意:如果是静态方法,声明泛型的时候,只能放到方法上面,不能放到类上面

回答: Java集合框架中的Map是一种键值对的数据结构,可以存储一组具有唯一键和对应值的元素。使用泛型可以在编译时进行类型检查,确保集合中只能存储指定类型的元素,提高代码的可读性和安全性。 在引用中的示例代码中,List<String>定义了一个只能存储字符串类型元素的列表。在引用中的示例代码中,Collection<String>和Collection<Integer>分别定义了只能存储字符串类型和整数类型元素的集合。使用泛型通配符可以增集合的灵活性。比如在coll.removeAll(c)方法中,传入的Collection对象的泛型可以是任意类型。另外,泛型还可以应用于Map集合,如引用中的示例代码中,Set<Map.Entry<String,String>>定义了只能存储键值对类型为String的元素的集合。 综上所述,Java集合框架中的Map泛型可以一起使用,通过泛型可以指定集合中存储的元素类型,增代码的可读性和类型安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [java基础中的--------Map+泛型](https://blog.csdn.net/liutaiwu/article/details/107915445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值