HashMap常用的方法有:

put(key,value)添加映射数据。
remove(key)删除映射数据。
clear() 删除所有的数据。
size()  可以查看元素的数量。
get(key) 获取健值key对应的value
replace(key,旧值,新值) 将key的旧值替换为新值。

例子:

HashMap map=new HashMap();
         //map.put(键,值);
         map.put("a", 12);//键    和   值  一一对应  键不可以重复  值可以重复
         map.put("b", 13);
         map.put("c", 25);
         map.put("d", 35);
         System.out.println(map);
         map.remove("a");//移除映射数据
         System.out.println(map);
         
         System.out.println(map.get("b "));
         System.out.println("包含的元素数量:"+map.size());//回去包含元素的数量
         
         map.replace("a",12,19);//替换原来键上的值 map.replace("键",旧值,新值);
         System.out.println(map);
         map.clear();//删除全部的值
         System.out.println(map);

foreach循环

foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了便。从英文字面意思理解foreach也就是“for 每一个”的意思,也就是把集合的每一个元素都过一遍。foreach语句是for语句的特殊简化版本,foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。

语法式格:

for(元素类型 元素变量:要遍历的对象合集){
    。。。循环体。。。
}

例子:

HashMap<String,Integer > map=new HashMap<>();
         map.put( "石家庄",5);
         map.put("沧州",6 );
         map.put("保定",8 );
         map.put("北京",10 );
         map.put("天津",16);
         System.out.println("输入集合的内容:"+map);
         //keySet方法来获取所有的键值
         System.out.println("集合map所有key值为:"+map.keySet());//
         System.out.println();
         
 //        System.out.println("用for循环遍历");
 //        for(int i=0;i<map.size();i++) {//普通for循环不好遍历
 //            System.out.println(map.get(i));
 //            
 //        }
         System.out.println();
         
         //将上边的for 循环改为foreach循环来遍历
         
         for(String i:map.keySet()) {
             System.out.println("地点:"+i+ " "+"编号:"+map.get(i));
             //map.get(i)是获取i对应的值
             
         }
         System.out.println();
         System.out.println("使用map的forEach方法进行遍历");
         
         //map 的forEach方法
         map.forEach((k,v)->{
             System.out.println(k+":"+v);});
         //k v 是随便定义的  ->的意思是让它执行按右边
         //System.out.pringln(k+":"+v)这种输出方事输出

泛型的概念:

Java 泛型(generics)是 JDK 5 中引入的一个新特性,泛型的本质是参数化类型,就是说将数据类型也指定为一个参数,数据类型参数化了。

这种参数类型可以在类,接口和方法的创建,分别称为泛型类,泛型接口,泛型方法。

泛型作用:

(1).将运行时期出现的问题ClassCastException转移到编译时期,方便程序员解决问题,让运行时期问题减少。

(2).避免了强制转换的麻烦。

自定义泛型

格式

修饰符  class  类名 <泛型类型>  {
     类体
}

自定义泛型用一些约定俗成的字母来表示不同的类型,建议使用 E,T,K,V,?;

泛型类型只能是一种引用类型,

E—— Element 表示元素 特性是一种枚举
T—— Type 类,是指Java类型
K—— Key 键
V—— Value 值
?——在使用中表示不确定类型  ?被称作是泛型通配符。

及用法

作用:

 Object是Java中所有类的根类,是具体的。使用object的时候可能是需要类型强制转换的。但是用自定义泛型变量中T、?这类变量类型,在实际用到之前可以提前将其确定好,这样就不需要再发生强制类型转换,保障数据的真实性。

  • 自定义泛型
  1. 泛型类:
//自定义泛型 
 class Animal <T>{
     public T t;//任意类型的属性
     public void sett( T t ) {//任意一个类型的参数
         this.t=t;
     }
     public T gett() {//返回任意一个类型的方法也是个泛型方法
         return this.t;
     }
 }
 class Dog{
     String name;
     int age;
     void eat() {
         System.out.println("一只名叫"+name+"的"+age+"的狗"+ "偷吃东西");
     }
 }
 class Fish{
     String name;
     int age;
     void eat() {
         System.out.println("一只名叫"+name+"的"+age+"的鱼"+ "偷吃东西");
     }
 }
 public class 泛型 {    public static void main(String[] args) {
         // TODO Auto-generated method stub
         Animal <String> animal=new Animal<String>();//指定<T>为Strting类型
         animal.sett("大黄");//这里类型就会被认为是String类型
         System.out.println(animal.gett());//调用gett()方法
         
         
         
         
         Animal<Dog> dog=new Animal<Dog>();
         Dog d=new Dog();
         d.name="大白";
         d.age=2;
         dog.sett(d);
         dog.gett().eat();
         System.out.println();
         
         
         
         Animal<Fish> fish=new Animal<Fish>();
         Fish f=new Fish();
         f.name="小鲫鱼";
         f.age=12;
         fish.sett(f);
         fish.gett().eat();
         System.out.println();

泛型方法:

//定义了一个泛型方法
 public static <T> void print(T t) {
     System.out.println(t.toString());
 }
     public static void main(String[] args) {
         // TODO Auto-generated method stub
         print("大家哈皮");
         print(411);

泛型接口:

interface Jk1<T>{
         public T input(T t);//输入任意类型一个值返回
     }
     class TestJk1 implements Jk1<String>{        @Override
         public String input(String t) {
             // TODO Auto-generated method stub
             return t;
         }
         
         
     }
     
     //测试类
 public class 泛型接口 {    public static void main(String[] args) {
        // TODO Auto-generated method stub
         //泛型接口演示
         TestJk1 ff=new TestJk1();
         System.out.println(ff.input("灌灌灌灌灌"));

泛型的上下限:

泛型上下限就是将所操作的数据类型限定在一个范围内。分为上限和下限。

上限:?   extends  E   接收E类型或是其子类
下限:?   super    E   接收E类型或是E的父类
写法  <?  extends  E>
      <?  super E >
import java.util.ArrayList;
 class Anmial{
     String name;
     int age;
 }
 class Dog1 extends Animal{
     String Tixing;
 }
 class LangDog extends Dog1{
     String pinzhong;
 }class SelsctDog{
     public void buy1(ArrayList<? extends Dog1> s) {//Dog1 及他下面的子类 不能有Animal
         System.out.println("调用父类父类及以下");
     }
     public void buy2(ArrayList< ?super Dog1>s){// Dog1及他上面的父类不能有LongDog
         System.out.println("调用父类及以上");
     }
 }
 //测试类
 public class 泛型上下限 {    public static void main(String[] args) {
         // TODO Auto-generated method stub
             ArrayList< Dog1> list1=new ArrayList<Dog1>();
             SelsctDog se1= new SelsctDog();
             se1.buy1(list1);
             ArrayList< Animal> list2=new ArrayList<Animal>();
             se1.buy2(list2);;