一、 Java 集合框架
- Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes 。
- 将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索retrieve 、管理 manipulate ,即平时我们俗称的增删查改 CRUD
二、类和接口
接口:抽象类进一步抽象,只包含抽象方法,字段只包含静态常量。(实现多态、向上转型)
抽象类;包含抽象类方法的类,用abstract修饰。
(接口和抽象类不能实例化。当实例化对象时,不用再一个一个类实例一个一个对象的繁琐操作,只需要这个类或多个类继承或实现了接口,就可以用抽象类或接口向上转型实例某个类的对象了。)
例如:
Collect collect=new ArrayList();
三、泛型
(1) Collection collection=new ArrayList<>( );:将类型参数化了
E:只能是基本数据类型。
(2)作用:实例化对象时指定参数的类型
如:
Collection<String>list=new ArrayList<>();
//添加元素
list.add("我");
list.add("爱");
list.add("Ado");
只能添加String类型的数据。
(四)、包装类
(1)八种基本数据类型对应的类
以此来对基本数据类型进行了面向对象。
装箱:将基本数据类型变成包装类
Integer a=123; (隐式的)
Integer a=new Integer.valueof(123);(显示的)
拆箱:将包装类变成基本数据类型
int b=a; (隐式的)
int b=a.intvalue; (显示的)
(2)Integer的范围
public static void main(String[] args) {
Integer a=129;
Integer b=129;
System.out.println(a==b);
}
输出: false
public static void main(String[] args) {
Integer a=123;
Integer b=123;
System.out.println(a==b);
}
输出:true
源码:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
(五)Collection接口的常用
public static void main(String[] args) {
//泛型
//通过Collection接口实例化一个ArrayList类对象
Collection<String>list=new ArrayList<>();
//计算长度
System.out.println(list.size());
//判读是否为空
System.out.println(list.isEmpty());
//添加元素
list.add("我");
list.add("爱");
list.add("Ado");
System.out.println(list.size());
System.out.println(list.isEmpty());
//返回装有数组集合的类
Object[] array=list.toArray();
System.out.println(Arrays.toString(array));
//遍历元素
for (String s:list) {
System.out.println(s);
}
//移除元素
list.remove("我");
for (String s:list) {
System.out.println(s);
}
//清空元素D
list.clear();
System.out.println(list.size());
System.out.println(list.isEmpty());
}
(六)、Map 常用方法说明
public static void main(String[] args) {
Map<String,String>map=new HashMap<>();
//求长度
System.out.println(map.size());
//判断是否为空
System.out.println(map.isEmpty());
//根据指定的K查找对应的V
System.out.println(map.get("作者"));
//根据指定的K查找对应的V,没有找到用默认值代替
System.out.println(map.getOrDefault("作者","佚名"));
//判断是否包含key
System.out.println(map.containsKey("作者"));
//判断是否包含value
System.out.println(map.containsValue("佚名"));
//将指定的k-v放入map中
map.put("作者","鲁迅");
map.put("标题","狂人日记");
map.put("发表时间","1918年");
System.out.println(map.size());
System.out.println(map.isEmpty());
System.out.println(map.get("作者"));
System.out.println(map.getOrDefault("作者","佚名"));
System.out.println(map.containsKey("作者"));
System.out.println(map.containsValue("佚名"));
//将所有的键对值返回
for (Map.Entry<String,String>entry:map.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
}
(七)、List接口的基本使用
public class Demo1 {
public static void main(String[] args) {
List<String> courses=new ArrayList<>();
//添加元素
courses.add("c语言");
courses.add("java SE");
courses.add("java Web");
courses.add("java EE");
//添加重复元素
courses.add("C语言");
System.out.println(courses);
//数组下标访问和通过下标修改
System.out.println(courses.get(0));
courses.set(0,"计算机基础");
System.out.println(courses);
//截取部分内容
List<String> subCourses=courses.subList(1,3);
System.out.println(subCourses);
//重新构造
List<String> courses2=new ArrayList<>(courses);
System.out.println(courses2);
List<String> couses3=new ArrayList<>(courses2);
System.out.println(couses3);
//引用的转换
ArrayList<String> courses4=(ArrayList<String>) courses2;
System.out.println(courses4);
//LinkedList<String> courses5=(LinkedList<String>) couses3;
// System.out.println(courses5);
}
}
(八)、抽牌游戏
//抽牌
class Card{
public int rank;//牌面值 1——52;
public String suit;
@Override
public String toString() {
return String.format("[%s %d]",suit,rank);
}
}
public class Demo1 {
public static final String[] SUITS={"♠","♥","♣","♦"};
//买一副牌
private static List<Card> buyDeck(){
List<Card> deck=new ArrayList<>(52);
for (int i = 0; i < 4; i++) {
for (int j = 1; j <=13 ; j++) {
String suit=SUITS[i];
int rank=j;
Card card=new Card();
card.rank=rank;
card.suit=suit;
deck.add(card);
}
}
return deck;
}
private static void swap(List<Card> deck,int i,int j){
Card t=deck.get(i);
deck.set(i,deck.get(j));
deck.set(j,t);
}
private static void shuffle(List<Card> deck){
Random random=new Random(20190905);
for (int i = deck.size()-1; i >0 ; i--) {
int r=random.nextInt(i);
swap(deck,i,r);
}
}
public static void main(String[] args) {
List<Card> deck=buyDeck();
System.out.println("刚买的牌");
System.out.println(deck);
shuffle(deck);
System.out.println("洗牌");
System.out.println(deck);
//三人抓牌,没人轮流抓5张牌。
List<List<Card>> hands=new ArrayList<>();
hands.add(new ArrayList<>());
hands.add(new ArrayList<>());
hands.add(new ArrayList<>());
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
hands.get(j).add(deck.remove(0));
}
}
System.out.println("剩余的牌:");
System.out.println(deck);
System.out.println("A 手中的牌:");
System.out.println(hands.get(0));
System.out.println("B 手中的牌:");
System.out.println(hands.get(1));
System.out.println("c 手中的牌:");
System.out.println(hands.get(2));
}
}
(九)、杨辉三角
//杨辉三角
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> ret=new ArrayList<>();
//第一行
List<Integer>list1=new ArrayList<>();
list1.add(1);
ret.add(list1);
for (int i = 1; i <numRows ; i++) {
List<Integer> list=new ArrayList<>();
list.add(1);
List<Integer> prev=ret.get(i-1);
for (int j = 1; j <i ; j++) {
//中间的情况
int num1=prev.get(j)+prev.get(j-1);
list.add(num1);
}
list.add(1);
ret.add(list);
}
return ret;
}
}
public class Demo1 {
public static void main(String[] args) {
Solution solution=new Solution();
System.out.println(solution.generate(10));
}
}