20200803_抽象类接口以及容器ArrayList、HashSet

1、作业解析

1.将如下字符串进行拆分

TOM:20|Jack:22|Rose:24

打印成如下形式:

姓名:tom,年龄:20岁

姓名:Jack,年龄:22岁

姓名:Rose,年龄:24岁

2.编写一个类,提供一个函数实现字符串反转功能,比如传入字符串“abcdefg”返回字符串“gfedcba”。

public class Homework0803 {
    public static void main(String[] args) {
       // splitStr();
        reverseStr("hellolemon");
    }

    //作业一:
    public static void splitStr(){
        String str = "TOM:20|Jack:22|Rose:24";
        String[] arr1 = str.split("\|");
        for (String keyAndValue : arr1) {
            String[] arr2 = keyAndValue.split(":");
            System.out.println("姓名:"+arr2[0]+",年龄:"+arr2[1]);
        }
    }

    //作业二:
    public static void reverseStr(String str){
        String afterStr = "";
        char[] arr = str.toCharArray();
        for (int i = 0; i < arr.length; i++) {
            afterStr = arr[i]+afterStr;
        }
        //p y t h o n
        //p
        //yp
        //typ
        //...
        System.out.println(afterStr);
    }
}

2、抽象类-父类abstract,相当于模板,不能实例化,不能创建对象,没有方法体{},所以子类要实现父类的抽象方法

子类可以继承抽象类,但必须实现抽象类中的全部抽象方法
抽象方法

  • 只声明而未实现的方法,即不能有方法体
  • 使用abstract修饰符


语法

访问修饰符 abstract class 类名{
public abstract void call();
...
}

作用
从多个具有共性的类中抽取出抽象类,抽象类作为子类设计的通用模板,避免子类设计的随意性
抽象父类提供子类的通用方法,将方法交由子类去实现
关键字:abstract,extend

3、接口-接口方法都是抽象的,如果接口中的方法你不写abstract,Java自动化的补上

 接口:规则,能力

    • 只能有抽象方法,一个类可以同时实现多个接口
    • 必须重写所有抽象方法
    接口与接口是继承,接口与类是实现
  • 接口是对继承的补充
  • 关键字:interface implements

4、抽象类和接口的比较

5、代码示例

 6、ArrayList-数组-八大数据类型的引用类型

6.1 八大基本数据类型都有对应的引用类型 --包装类

  • int -> Integer
  • char -> Character
  • boolean ->Boolean
  • float ->Float
  • double ->Double
  • byte ->Byte
  • short ->Short
  • long ->Long

容器支持的数据类型:引用类型 、不能支持基本的数据类型
容器特点

  • 长度可变数组,提供很多方便的方法
  • 有序(可以通过索引来访问)、可重复
  • 泛型:规定集合存储的数据类型。

6.2ArrayList常用Api

  • 创建list对象-ArrayList list= new ArrayList();
  • 添加数据-list.add(…);
  • 取出数据-list.get(index);
  • 移除数据-remove(…);
  • 获取list集合的大小-size();
  • 判空函数-isEmpty(…)
  • 判断是否包含某数据-contains(…)
  • 修改某个位置上的数据-set(…)

迭代Arraylist
1.通过for循环来迭代

for(int i=0; i<list.size(); i++){
System.out.println(list.get(i));
}

2.通过增强式循环(foreach)方式来迭代

for(String str : list){
System.out.println(str);
}

6.3 代码

import java.util.ArrayList;
public class ArrayListTest {
    public static void main(String[] args) {
        //1、创建ArrayList对象
        //泛型 -- 规定里面存储的数据类型,同时存储一种类型
        ArrayList<String> arrayList = new ArrayList<String>();
        //2、存储数据的 add 添加
        arrayList.add("hello");
        arrayList.add("lemon");
        arrayList.add("java");
        arrayList.add("python");
        // this is lemon class
        //3、取得数据
        /*System.out.println(arrayList.get(0));
        System.out.println(arrayList.get(1));
        System.out.println(arrayList.get(2));
        System.out.println(arrayList.get(3));*/
        //4、remove 移除数据
       // arrayList.remove("lemon");
        //arrayList.remove(1);
        /*System.out.println(arrayList.get(0));
        System.out.println(arrayList.get(1));
        System.out.println(arrayList.get(2));
        //IndexOutOfBoundsException  越界
        System.out.println(arrayList.get(3));*/
        //5、获取大小 size
        //System.out.println(arrayList.size());
        //6、判断集合是否为空
        //System.out.println(arrayList.isEmpty());
        //7、clear 清除集合中的全部数据
        /*arrayList.clear();
        System.out.println(arrayList.isEmpty());
        System.out.println(arrayList.size());*/
        //8、contains 判断是否包含某个值
        //System.out.println(arrayList.contains("lemon"));
        //9、set 修改值
        //arrayList.set(1,"test");
        //System.out.println(arrayList.get(1));

        //怎么一次性把集合当中的全部数据输出
        //1、foreach 增强式for循环
        /*for(String arr : arrayList){
            System.out.println(arr);
        }*/
        //2、普通for循环
        /*for(int i=0; i<arrayList.size(); i++){
            //int position = i+1;
            System.out.print("数据所在的位置:"+(i+1));
            System.out.println(" 对应的值:"+arrayList.get(i));
        }*/

    }
}

7、HashSet-要用到Iterator

容器支持的数据类型:引用类型
特点

  • 数据排列:无序 不能够通过索引来访问里面的数据
  • 数据重复性:不可重复

7.1 HashSet常用Api

  • 创建set对象-HashSet set = new HashSet();
  • 添加数据-add(…)
  • 删除数据-remove(…)
  • 获取集合的大小-size()
  • 判断是否包含某数据-contains()
  • 判断集合是否为空-isEmpty()

迭代HashSet
1.通过foreach

for(String arr : hashSet){
            System.out.println(arr);

2.通过迭代器

Iterator<String> ite = hashSet.iterator();
while(ite.hasNext()){
String ele = ite.next();
System.out.println(ele);
}

7.2 代码

import java.util.HashSet; 
import java.util.Iterator;
public class HashSetTest {
    public static void main(String[] args) {
        //1、创建HashSet对象
        HashSet<String> hashSet = new HashSet<String>();
        //2、添加数据 add
        hashSet.add("hello");
        hashSet.add("lemon");
        hashSet.add("java");
        hashSet.add("python");
        hashSet.add("lemon");
        
        //3、size获取到长度
        //System.out.println( hashSet.size());
        //4、remove 移除掉数据
        //hashSet.remove("lemon");
        //System.out.println( hashSet.size());
        //5、判断是否包含某数据
        //System.out.println(hashSet.contains("pythn"));
        //6、isEmpty 判断集合是否为空
        //System.out.println(hashSet.isEmpty());
        //7、清除集合中的全部数据
        //hashSet.clear();
        //System.out.println(hashSet.isEmpty());
        //遍历获取全部的数据
        //1、foreach循环
/*        for(String arr : hashSet){
            System.out.println(arr);
        }*/

        //2、普通的for循环???索引 -no
        //2、迭代器 -- 对集合中的数据进行循环迭代
        /*Iterator<String> ite = hashSet.iterator();
        while(ite.hasNext()){
            System.out.println(ite.next());
        }*/

    }
}
原文地址:https://www.cnblogs.com/shishibuwan/p/13763945.html