集合泛型 #yyds干货盘点#
Posted 梁云亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合泛型 #yyds干货盘点#相关的知识,希望对你有一定的参考价值。
8.1 Collection List Set
- ArrayList
package cn.webrx;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.List;
public class List1
public static void main(String[] args)
//实例化ArrayList
List list1 = new ArrayList();
ArrayList list2 = new ArrayList();
var list = new ArrayList();
var list3 = List.of(1,2,3,"hello","php",new Date());
//array list相互转换
int[] arr = new int[]1,2,3;
List lis = new ArrayList(Arrays.asList(arr));
System.out.println(lis.get(0));
System.out.println(lis.size());
//增加元素
list.add("java");
list.add(100);
list.add(new Date());
list.add(0, "javascript");
//输出集合容器中的元素个数
System.out.println(list.size());
list.remove(2);//删除一个元素
list.remove(2);//删除一个元素
list.add(1,new Date());
System.out.println(String.format("%1$tF %1$tT",list.get(1)));
//清空集合,删除所有元素 .size() 为0
//list.clear();
list.add("python");
System.out.println(list.indexOf("java"));
list.set(2, "python");//修改指定索引位置的对象
System.out.println(list.contains("java"));
System.out.println("-".repeat(50));
//list.remove("python");
//list.removeIf(e->e.toString().contains("py"));
//list.removeIf(e->true);
System.out.println(list.size());
for(Object o : list)
System.out.println(o);
Object[] os = list.toArray();
System.out.println(os.length);
System.out.println("-".repeat(50));
list.addAll(2, List.of(100,200,300,400,500));//将另一个list增加进来
list.forEach(System.out::println);
- ArrayList和Array数组类型转换
package cn.webrx;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class List2
public static void main(String[] args)
Integer[] nums = new Integer[] 10, 20, 30, 40, 50 ;
//固定尺寸的List
List<Integer> list = Arrays.asList(nums);
List list2 = List.of(1, 2, 3);
System.out.println(list.size());
System.out.println(list2.size());
//list.clear(); 异常
//list2.clear(); 异常
//数组 转 List
List list3 = new ArrayList(list);
System.out.println(list3.size());
list3.add(600);
list3.addAll(List.of(700,800,900));
System.out.println(list3.size());
System.out.println(list3);
System.out.println(Arrays.toString(nums));//数组
//List 转到 数组
Object[] ns = list3.toArray();
System.out.println(ns.length);
for(Object i : ns)
System.out.println(i);
package cn.webrx;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class List3
public static void main(String[] args)
List<String> list = new ArrayList<String>();
list.addAll(List.of("java", "php", "python"));
list.add(0, "html");
list.add(2, "javascript");
list.set(3, "mysql");
System.out.println(list.size());// 5
System.out.println(list.get(1));// java
System.out.println(list.indexOf("mysql"));// 3
System.out.println(list.contains("python"));// true
// list.forEach(System.out::println);
list.stream().filter(e -> e.startsWith("java")).forEach(System.out::println);
for (String s : list)
System.out.println(s);
System.out.println(list);
Integer[] nn = 10, 20, 30, 40 ;
System.out.println(nn);
System.out.println(Arrays.toString(nn));
System.out.println(List.of(nn));//固定尺寸的List
System.out.println(new ArrayList<Integer>(List.of(nn)));//List
var lista = new ArrayList<String>(List.of("a","b","c"));
var listb = new ArrayList<String>(List.of("aa","bb","cc","dd"));
lista.addAll(listb);
lista.addAll(listb);
lista.addAll(listb);
System.out.println(lista);
- HashSet
package cn.webrx;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
import javax.imageio.ImageIO;
public class Set1
public static void main(String[] args) throws FileNotFoundException, IOException
Set<Integer> sets = new HashSet<>();
sets.add(10);
sets.add(10);
sets.add(10);
sets.add(10);
sets.add(10);
// System.out.println(sets.size());
// sets.clear();
// sets.contains(10)
// sets.remove(10);
// 编写双色球效果
Random rand = new Random();
// 生成蓝色 1 (1-16)
int blue = rand.nextInt(16) + 1;
// 生成红色 5 (1-33)
Set<Integer> reds = new HashSet<>();
while (reds.size() < 5)
reds.add(rand.nextInt(33) + 1);
System.out.println(reds);
System.out.println(blue);
List<Integer> list = new ArrayList<Integer>(reds);
list.sort((a, b) -> a - b);
list.add(blue);
System.out.println(list);
BufferedImage i = new BufferedImage(350, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = i.createGraphics();
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
g.setFont(new Font("", Font.BOLD, 25));
g.setStroke(new BasicStroke(3));
for (int n = 0; n < list.size(); n++)
g.setColor(Color.BLUE);
int x = n * 55 + 12;
int y = 28;
String sc = String.format("%02d", list.get(n));
if (n < 5)
g.setColor(Color.RED);
g.drawOval(x, y, 50, 50);
g.drawString(sc, x + 12, y + 33);
continue;
g.drawOval(x, y, 50, 50);
g.drawString(sc, x + 12, y + 33);
g.dispose();
ImageIO.write(i, "png", new FileOutputStream("ok.png"));
//Runtime run = Runtime.getRuntime();
//run.exec("cmd /k start ok.png");
- LinkedList
1、LinkedList类是List接口的一个具体实现类
2、LinkedList 类用于创建链表数据结构
3、插入或者删除元素时,它提供更好的性能
package cn.webrx;
import java.util.LinkedList;
import java.util.List;
public class LinkedList1
public static void main(String[] args)
LinkedList<String> list = new LinkedList<>();
list.add("java");
list.add("html");
list.add("mysql");
//list.clear();
//list.isEmpty();
list.remove("java");
list.remove(0);
list.addFirst("java");
list.addLast("python");
System.out.println(list);
package cn.webrx;
import java.util.LinkedList;
public class Stack<E>
private E e;
private LinkedList<E> stack = new LinkedList<>();
private int i = 0;
public Stack()
public int size()
return this.i;
public void add(E e)
++i;
stack.addLast(e);
public E get()
--i;
return stack.removeLast();
8.2 Map
- HashMap
package cn.webrx;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Map1
public static void main(String[] args)
// Book b1 = new Book(100,"《java项目实战开发》",18);
// Book b2 = b1;
// b2.setPrice(90);
// System.out.println(b1 == b2);//true false
// System.out.println(b1.getPrice());
// keys values 键值对数组
Map<String, Book> m = new HashMap<>();
m.put("java1", new Book(100, "《java项目实战开发》", 18));
m.put("java2", new Book(100, "《java项目实战开发》", 18));
m.put("java3", new Book(100, "《java项目实战开发》", 18));
m.put("java3", new Book(100, "《java项目实战开发》", 18));
m.put("php", new Book(101, "《php入门开发》", 15));
System.out.println(m.containsKey("php"));//true
System.out.println(m.containsValue(m.get("php")));//true
// m.clear();
// m.size();
// m.isEmpty()
// 移除元素
Book book = m.remove("java3");
// System.out.println(book);
System.out.println(m.containsValue(book));//false
// System.out.println(m.size());
Set<String> keys = m.keySet();
for (String k : keys)
System.out.printf("%s = %s %n", k, m.get(k));
// 遍历值集合Collection
Collection<Book> vs = m.values();
for (Book bk : vs)
System.out.println(bk);
m.forEach((k, v) ->
System.out.println(k);
System.out.println(v);
);
8.3 泛型编程
泛型是jdk5引入的类型机制,就是将类型参数化,它是早在1999年就制定的jsr14的实现。
泛型机制将类型转换时的类型检查从运行时提前到了编译时,使用泛型编写的代码比杂乱的使用Object并在需要时再强制类型转换的机制具有更好的可读性和安全性。
泛型程序设计意味着程序可以被不同类型的对象重用,类似c++的模版。
泛型对于集合类尤其有用,如ArrayList。这里可能有疑问,既然泛型为了适应不同的对象,ArrayList本来就可以操作不同类型的对象呀?那是因为没有泛型之前采用继承机制实现的,实际上它只维护了一个Object对象的数组。结果就是对List来说它只操作了一类对象Object,而在用户看来却可以保存不同的对象。
泛型提供了更好的解决办法——类型参数,如:
List list = new ArrayList();
这样解决了几个问题:
1 可读性,从字面上就可以判断集合中的内容类型;
2 类型检查,避免插入非法类型。
3 获取数据时不在需要强制类型转换。
以上是关于集合泛型 #yyds干货盘点#的主要内容,如果未能解决你的问题,请参考以下文章
Java集合框架之 Collection 接口 #yyds干货盘点#