泛型
-
常见形式有泛型类,泛型接口,泛型方法
-
语法
-
<T....>T称为类型占位符,表示一种引用类型
-
好处:
-
提高代码的重用性
-
防止类型转换异常,提高代码的安全性
-
-
泛型类
/** * 泛型类 * 语法:类名<T> * T是类型占位符,表示一种引用类型,如果编写多个使用逗号隔开 * @param <T> */ public class MyGeneric<T> { //使用泛型 //1.创建变量 T t; //2.泛型作为方法的参数 public void show(T t){ System.out.println(t); } //3.泛型作为方法的返回值 public T getT(){ return t; } }
-
泛型接口及实现类
public interface MyInterface<T> { String name="李永辉"; T server(T t); } --------------------------------------------------------------------- public class MyInterfaceImpl implements MyInterface<String>{ @Override public String server(String s) { System.out.println(s); return s; } }
-
泛型方法
/** * 泛型方法 * 语法:<T>返回值类型 */ public class MyGenericMethod { public <T> T show(T t){ System.out.println("泛型方法"+t); return t; } }
-
泛型集合
-
概念:参数化类型,类型安全的集合,强制集合元素的类型必须一致
-
特点:
-
遍历时即可查询,而非运行时抛出异常
-
访问,不必类型转换
-
不同类型之间引用不能相互赋值,泛型不存在多态
public static void main(String[] args) { ArrayList<Student> studentArrayList=new ArrayList<>(); Student s1=new Student("李永辉",2); Student s2=new Student("李永辉",2); Student s3=new Student("李永辉",2); studentArrayList.add(s1); studentArrayList.add(s2); studentArrayList.add(s3); Iterator<Student> iterator = studentArrayList.iterator(); while (iterator.hasNext()){ Student next = iterator.next(); System.out.println(next.toString()); } }
-
-
-
Set子集合
-
HashSet(重点):
-
基于HashCode实现元素不重复
-
当存入元素的哈希码相同时,会调用equlas进行确定,如果为true,这后者无法进入
-
特点:唯一,无序
-
Set接口:可以直接使用Collection接口声明的方法,但是木get(index)方法来活得对象,遍历时建议使用增强for循环,或者迭代器
-
-
HashMap(重点):
-
特点:
-
线程不安全,运行效率快,允许用null作为key或者value
-
-
key对应的value
-
代码实现
public static void main(String[] args) { HashMap<String,String> map=new HashMap<>(); map.put("1","我是谁"); map.put("2","李永辉"); map.put("3","那你说"); map.put("4","沙雕"); map.put("5","葛博建是傻逼"); System.out.println("元素个数"+map.size()); System.out.println(map.toString()); //删除 map.remove("1"); System.out.println("元素个数"+map.size()); // Set<String> keySet = map.keySet(); for (String key:map.keySet()) { System.out.println(key+"------"+map.get(key)); } System.out.println("---------------"); Set<Map.Entry<String, String>> entries = map.entrySet(); for (Map.Entry<String,String> entry:entries) { System.out.println(entry.getKey()+"---"+entry.getValue()); } //判断 System.out.println(map.containsKey("1")); System.out.println(map.containsValue("李永辉")); }
-
练习(创建Student类,姓名String,学号int)
public static void main(String[] args) { //创建集合 HashMap<Student1, String> student1StringHashMap = new HashMap<>(); //添加元素 Student1 s1=new Student1("孙悟空",100); Student1 s2=new Student1("猪八戒",101); Student1 s3=new Student1("沙和尚",102); student1StringHashMap.put(s1,"杭州"); student1StringHashMap.put(s2,"北京"); student1StringHashMap.put(s3,"山东"); System.out.println("元素个数:"+student1StringHashMap.size()); System.out.println(student1StringHashMap.toString()); //遍历使用keySet()遍历 for (Student1 student1:student1StringHashMap.keySet()) { System.out.println(student1.toString()); } System.out.println("=============="); //迭代器遍历entrySet() for (Map.Entry<Student1,String> entry:student1StringHashMap.entrySet()) { System.out.println(entry.toString()); } }
-
-