泛型
-
泛型常用规范:
-
E - element - 元素
-
T - type - 类型
-
N - name - 名字
-
K - key - 键
-
V - value - 值
-
泛型的作用:规定数据类型,所以泛型叫做数据安全的做法
-
注意:
-
1.在类上定义泛型,创建该类的对象时就需要定义泛型类型
-
2.泛型必须是引用数据类型
-
3.泛型只在编码阶段有效,泛型不会随着编译而编译到class文件
-
4.泛型可以有多个,使用逗号隔开 -- public class HashMap<K,V>{}
1.为什么要有泛型?
如果没有泛型,我们在使用集合等很多类的API时,会有:
-
麻烦:需要强制类型转换
-
不安全:在编译时不会对类型提前检查
Java5版本引入了泛型,并且对集合、比较器等很多类做了修改,使得它们支持泛型,变的更好用,更安全。
package com.atguigu.generic; import org.junit.Test; import java.util.ArrayList; public class TestCollection { @Test public void test1(){ //未使用泛型 //集合,是一种用来装多个对象的容器类型。 //容器的类型有很多,咱们举一个ArrayList来演示 //ArrayList:动态数组 ArrayList list = new ArrayList(); list.add("hello"); list.add("world"); list.add("java"); list.add("atguigu"); list.add(888); //遍历它,使用增强for循环 //遍历集合,查看每一个字符串元素的长度 for (Object o : list) { String str = (String) o;//强转 System.out.println(str +"的长度:" + str.length()); } } @Test public void test2(){ //有泛型 ArrayList<String> list = new ArrayList<>(); list.add("hello"); list.add("world"); list.add("java"); list.add("atguigu"); // list.add(888);//编译就报错了,不符合元素的类型要求 //遍历它,使用增强for循环 //遍历集合,查看每一个字符串元素的长度 for (String str : list) { System.out.println(str +"的长度:" + str.length()); } } }
2.泛型限定
//?表示任意的引用数据类型 public static ArrayList<?> method01(){ ArrayList<Object> list = new ArrayList<>(); return list; } //? extends A 表示A类或A的子类类型 public static ArrayList<? extends A> method02(){ //ArrayList<A> list = new ArrayList<>(); ArrayList<B> list = new ArrayList<>(); return list; } //? super A 表示A类或A的父类类型 public static ArrayList<? super A> method03(){ //ArrayList<A> list = new ArrayList<>(); ArrayList<Object> list = new ArrayList<>(); return list; }
集合
Collection接口
List接口
ArrayList常用方法
public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); //添加元素 list.add("小红"); list.add("小绿"); list.add("小蓝"); list.add("小紫"); //添加元素到指定下标上 list.add(1, "猪猪"); //将newlist1中所有的元素添加到list集合末尾的位置 ArrayList<String> newlist1 = new ArrayList<>(); Collections.addAll(newlist1, "aaa","bbb","ccc","ccc");//利用集合工具批量添加元素 list.addAll(5, newlist1); //将newList2中所有的元素添加到list集合指定下标的位置 ArrayList<String> newlist2 = new ArrayList<>(); Collections.addAll(newlist2, "xxx","yyy","zzz","zzz","abc","def","ghi","jkl");//利用集合工具类批量添加元素 list.addAll(5, newlist2); //获取指定下标上的位置 String str = list.get(1); System.out.println(str);//猪猪 //获取元素个数 int size = list.size(); System.out.println(size);//9 //清空 //list.clear(); System.out.println("判断集合中是否有某个元素:"+list.contains("猪猪"));//true System.out.println("判断集合是否为空:"+list.isEmpty());//false System.out.println("判断集合中指定元素第一次出现的下标:"+list.indexOf("ccc"));//7 System.out.println("判断集合中指定元素最后一次出现的下标:"+list.lastIndexOf("ccc"));//8 list.remove(1);//根据下标删元素 list.remove("小紫");//根据元素删元素 //删除list中包含了newlist1的元素(去交集) list.removeAll(newlist1); //保留list中包含了newlist2的元素(保留交集) list.retainAll(newlist2); //替换/设置指定下标上的元素 list.set(0, "小紫"); System.out.println(list); //获取开始下标处到结束下标处的元素,并返回新的集合 List<String> subList = list.subList(3, 6); //将集合转为Object数组 Object[] array1 = subList.toArray(); System.out.println(Arrays.toString(array1)); //将集合转换为指定类型的数组 String[] array2 = new String[subList.size()]; subList.toArray(array2); System.out.println(Arrays.toString(array2)); System.out.println("----------------------"); // 遍历集合--for循环 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } System.out.println("----------------------"); //遍历集合--Iterator Iterator<String> it = list.iterator(); while(it.hasNext()){ String element = it.next(); System.out.println(element); } System.out.println("----------------------"); //遍历集合--ListIterator ListIterator<String> listit = list.listIterator(); while(listit.hasNext()){ String element = listit.next(); System.out.println(element); } //ListIterator的删除 ListIterator<String> listIterator = list.listIterator(); while(listIterator.hasNext()){ String element = listIterator.next(); if(element.equals("椎名空")){ listIterator.remove(); } } //ListIterator的添加 ListIterator<String> listIterator = list.listIterator(); while(listIterator.hasNext()){ String element = listIterator.next(); if(element.equals("椎名空")){ listIterator.add("曾子俊"); } } //ListIterator的替换 ListIterator<String> listIterator = list.listIterator(); while(listIterator.hasNext()){ String element = listIterator.next(); if(element.equals("椎名空")){ listIterator.set("曾子俊"); } } //ListIterator的指定下标遍历 ListIterator<String> listIterator = list.listIterator(1); while(listIterator.hasNext()){ String element = listIterator.next(); System.out.println(element); } //ListIterator的倒序遍历 ListIterator<String> listIterator = list.listIterator(list.size()); while(listIterator.hasPrevious()){//判断上一个是否有可迭代的元素 String element = listIterator.previous();//获取上一个元素 System.out.println(element); } for (String element : list) { System.out.println(element); } }
LinkedList
除了拥有ArrayList的常用方法还有其独特方法
LinkedList<String> list = new LinkedList<>(); list.add("小红"); list.add("小黄"); list.add("xxx"); list.add("小绿"); list.add("yyy"); list.add("小紫"); list.add("xxx"); list.add("小粉"); list.add("xxx"); //将元素添加到集合的首位 list.addFirst("小蓝"); list.offerFirst("小灰"); list.push("小黑"); //将元素添加到集合的末尾 list.addLast("aaa"); list.offer("bbb"); list.offerLast("ccc"); //获取第一个元素 System.out.println("获取第一个元素:" + list.element()); System.out.println("获取第一个元素:" + list.getFirst()); System.out.println("获取第一个元素:" + list.peek()); System.out.println("获取第一个元素:" + list.peekFirst()); //获取最后一个元素 System.out.println("获取最后一个元素:" + list.getLast()); System.out.println("获取最后一个元素:" + list.peekLast()); //删除第一个元素 System.out.println("删除第一个元素:" + list.poll()); System.out.println("删除第一个元素:" + list.pollFirst()); System.out.println("删除第一个元素:" + list.pop()); System.out.println("删除第一个元素:" + list.removeFirst()); //删除最后一个元素 System.out.println("删除最后一个元素:" + list.pollLast()); System.out.println("删除最后一个元素:" + list.removeLast()); //删除第一个出现的元素 list.removeFirstOccurrence("xxx"); //删除最后一次出现的元素 list.removeLastOccurrence("xxx"); //倒序遍历 // Iterator<String> descendingIterator = list.descendingIterator(); // while(descendingIterator.hasNext()){ // String element = descendingIterator.next(); // System.out.println(element); // } System.out.println("------------------------------"); for (String element : list) { System.out.println(element); } } //队列模式(先进先出) public static void main(String[] args) { LinkedList<String> list = new LinkedList<>(); list.add("1111"); list.add("2222"); list.add("3"); list.add("小红"); list.add("小黑"); while(!list.isEmpty()){ String element = list.removeFirst(); System.out.println(element); } System.out.println("元素个数为:" + list.size());//0 } //栈模式(先进后出、后进先出) 把list.removeFirst()改成list.removeLast()就ok 标签:java,Day24,ArrayList,list,System,add,基础,println,out From: https://blog.csdn.net/2301_81594623/article/details/144039796