Java 常用类与集合框架 泛型

一、常用类

常用类中将主要学习:

  java.lang包中的类:

    Object类

    Math类

    String类 和 StringBuffer类 (字符串)

    8种基本数据类型所对应的包装类

  java.util包中的类

    Date类

1、Object 类

  Object 类时java语言程序中所有类的父类,即java程序中其他所有类都是继承自Object类

  Object类中包含了Java语言类中的所有公共属性。

    toString( )方法

    equals( )方法

    getClass( )方法

    clone( )方法

    finalize( )方法

 2、Math

  java.lang.Math类提供了常用的数字运算方法和两个静态常量E(自然对数的底数)和PI(圆周率)

  (1)、Math.abs  求绝对值  Math.abs(-3.5);  //返回3.5

  (2)、Math.max  求最大值  Math.max(2.5,90.5);  //返回90.5

  (3)、第一种方法:int random = ( int )( Math.random()*10);  //生成一个0-9之间的随机数

     第二种方法:Random rand = new Random();  int num = rand.nextint(10);  //生成一个0-9之间的随机数

3、String 类

使用String 对象存储字符串

  String str = " JAVA";  

  String str = new String();

  String str = new String("Java");

String类常用操作:

  计算字符串的长度 :str.length

  比较字符串 : str.equals( " **")   或   “ == ”

        equals() : 检查组成字符串内容的字符是否完全一致

        “ == ” : 判断两符串在内存中的首地址,即判断是否是用一个字符串对象

  字符串连接:方法1:使用 “ + ”  

      String str1 = "Java";
       String str2 = "Hello";
       String str3 = str1+str2;

       方法2:使用String类中的concat()方法

        String str1 = new String("欢迎学习");
        String str2 = new String("JAVA");
        String result = str1.concat(str2);

  字符串常用提取:

    indexOf()  //搜索第一个出现的元素的下标

    lastindexOf()  //搜索最后一个出现的元素的下标

    substring(int index)  //提取从位置索引开始的字符串的部分

    sunstring(int beginindex,int enindex)  //提取beginindex 和 endindex 之间的字符串部分

    trim()  //返回一个前后不含任何空格的调用字符串的副本

  字符串拆分:

    String类提供了split()方法,将一个字符串分割为子字符串,结果作为字符串数组返回

        String str = "a,b,c,d,e,g";
        String[] split = str.split(",");    //将字符串str通过,拆分

4、StringBuffer类

  StringBuffer:String增强版

  StringBuffer声明

      StringBuffer sb1 = new StringBuffer();

  StringBuffer的使用

      sb1.toString();  //转化为String类型

      sb1.append(" *** ");  //追加字符串

  StringBuffer可以将任何类型的值追加到字符串之后

 

 5、操作日期时间

  Date类:表示日期和时间

    提供操作日期和室间各组成部分的方法

  SimpleDateFormat类

    用于定制日期时间的格式

    public static void main(String[] args) {
        
        Date date = new Date();        //获取当前时间
        System.out.println(date);
            
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        //定义一个时间格式
        
        String date1 = format.format(date);        // 把获取的Date时间 转化成  对应格式的 String类型
        
        System.out.println(date1);
                
    }

 

 输出的结果为:

        Tue Apr 02 19:53:25 CST 2019
        2019-04-02 19:53:25

 6、Calendar类:

  抽象类

  用于设置和获取日期/时间数据的特定部分

  Calendar类提供一些方法和静态字段来操作日历

Calendar calendar = Calendar.getInstance();        //    日历方法
        
        //获取  年分
        System.out.println(calendar.get(calendar.YEAR));
        
        //获取  月份  因为获取的是 0 -11的,所以获取当前月时要+1
        System.out.println(calendar.get(calendar.MONTH)+1);
        
        //获取 天数
        System.out.println(calendar.get(calendar.DAY_OF_MONTH));
        
        //获取  星期    因为星期是从周日开始的,所以获取当期星期要-1
        System.out.println(calendar.get(calendar.DAY_OF_WEEK)-1);
        
        //获取  小时
        System.out.println(calendar.get(calendar.HOUR));
        
        //获取  分钟
        System.out.println(calendar.get(calendar.MINUTE));
        
        //获取  秒
        System.out.println(calendar.get(calendar.SECOND));

输出结果: 

    2019
    4
    2
    2
    8
    1
    48

 

7、枚举类

   枚举指由一组固定的常量组成的类型

   枚举类的好处:  类型安全,易于输入,代码清晰

/**
 * 创建一个性别的枚举类
 * @author Administrator
 *
 */
public enum Sex {
    男,女
}

 

二、Java集合框架

  Java集合框架位于java.util包中,提供了一套性能优良、使用方便的接口和类

 1、List接口

   List接口存储一组不唯一,有序(插入顺序)的对象

   ArrayList类实现了长度可变的数组,在内存中分配连续的空间。遍历元素的随机访问元素的效率比较高

   LinkedList类采用链表存储方式。插入、删除元素时效率比较高

  ArrayList常用方法

    定义一个ArrayList集合:List list = new ArrayList();

        //定义一个ArrayList集合
        List list = new ArrayList();
        
        list.add(1);    //将元素添加到集合中
        
        list.add(1, 2);     //将元素 2 插入到集合的 下标为 1 的位置
        
        list.get(1);    //返回集合中索引为 1 的元素
        
        list.indexOf(2);    //返回元素 2 在集合中出现的索引
        
        list.set(1, 3);        //将下标为 1 的元素替换为 3
        
        list.remove(1);        //删除并返回 下标为 1 的元素
        
        list.isEmpty();     // 判断 list集合是否为空    返回的是boolean类型
        
        list.contains(3);    // 判断list集合中是否包含 3  返回的是boolean类型

  LinkedList常用方法:

    定义一个LinkedList : LinkedList list = new LinkedList();

//定义一个 LinkedList集合
        LinkedList list = new LinkedList();
        
        list.addFirst(1);         //将给定元素插入当前集合头部
        
        list.addLast(5);         //将给定元素插入当前集合尾部
        
        list.getFirst();        //获取当前集合的第一个元素
        
        list.getLast();            //获取当前集合的最后一个元素
        
        list.removeFirst();        //移除并返回当前集合的第一个元素
        
        list.removeLast();        //移除并返回当前集合的最后一个元素

2、Set接口

  set接口存储一组唯一,无序的对象

  HashSet 是Set接口常用的实现类

  •    HashSet允许集合元素值为null
  •   操作数据的方法与List类似,Set接口不存在get()方法

  定义一个Set集合 : Set set = new HashSet();

 3、HashMap

  HashMap 是Map接口最常见的实现类

  存储一组成对的 键 - 值对象,提供key(键)到 value(值)的映射,通过key来索引

  •   key不允许重复
  •   value允许重复
  •   添加的对象将转换为Object类型

   定义一个HashMap 集合 : HashMap map = new HashMap();

    
        //定义一个HashMap 集合
        Map map = new HashMap();
        
        map.put(1, "编号");        //将互相关联的一个关键字(key)与一个值(value)放入该集合
        
        map.remove(1);            //将 key值为 1的元素移除
        
        map.get(1);                //获取与关键字key相关的值。如果该键不关联任何非null值,则返回null
        
        map.containsKey(1);     //判断集合中是否存在关键字key
        
        map.containsValue("11");     //判断集合中是否存在值value
        
        map.isEmpty();        //判断集合中是否存在元素
        
        map.clear();         //清楚集合中的所有元素
        
        map.size();            //返回集合中元素的数量
        
         Set set1 =map.keySet();    //获取所有键key的集合
         
         Collection set2 =map.values();        //获取所有值value的集合

遍历HashMap:

  keySet()方法获取键的集合

  values()方法获取值得集合

//定义一个HashMap 集合
        Map map = new HashMap();
        
        //循环给map集合赋值
        for(int i = 0;i<=5;i++){
            map.put(i, i*5);
        }
        
        //遍历map集合
        Set sets = map.keySet();
        
        //foreach循环
        for(Object o : sets){
            System.out.println(o +"  "+ map.get(o));
        }

 打印结果为:

     0 0
    1 5
    2 10
    3 15
    4 20
    5 25

 4、Collections类

  Collections和Collection不同,前者是集合的操作类,后者是集合接口
  Collections提供的静态方法
    sort():排序
    binarySearch():查找
    fill():替换

 

三、泛型

  将对象类型作为参数,制定到其他类或者方法上,从而保证类型转换安全性和稳定性

    本质是参数化类型

 泛型包括:

    1、泛型集合 :限定集合中的数据类型,使得集合在取值时能被正确使用

    2、泛型方法 :在方法中定义泛型,泛型作用在该方法上,出了方法谁也不认识。

           此处泛型是一个泛指,是根据实现使用时变化的数据类型

    3、泛型类  :在类中定义泛型,在类的方法或常量中就可以使用该泛型作为数据类型

    4、泛型接口 :在接口中定义泛型,在接口的方法或常量中就可以使用该泛型作为数据类型。

            此处泛型是一个泛指,是根据实现使用时变化的数据类型

    5、多重泛型 :在定义泛型时,可以使用N个泛型变量

 泛型集合:

  泛型集合可以约束集合内的元素类型

  典型泛型集合 ArrayList<E>,HashMap<K,V>

  

ArrayList<E>

public static void main(String[] args) {
        
        // ArrayList<E>  定义一个只能存放字符串类型的List集合
        List<String> list = new ArrayList<String>();
        list.add("123");        //只能向该集合中添加字符串类型的数据
        list.add("xxx");
        
        //ArrayList   定义一个没有声明泛型的List集合
        List list1 = new ArrayList(); 
        list1.add("123");    //可以装字符串
        list1.add(123);        // 数字
        list1.add(true);    //    boolean类型
    }

HashMap<k,V>

    // HashMap<K,V>   定义一个键只能存放 字符串类型, 值只能存放 integer类型的Map集合
        Map<String,Integer> map = new HashMap<String,Integer>();
        map.put("123", 111);    //key 只能是字符串类型,value只能是int类型
        map.put("adasd", 358);
        
        // HashMap   定义一个没有声明泛型的Map集合
        Map map1 = new HashMap();
        map1.put(123, 123);        //没有使用泛型来限制key value 的数据类型,所有key value 可以是任何Object对象
        map1.put(true, "123");

  

泛型接口:

  泛型接口就是一个或多个类型参数的接口

语法:

  public interface 接口名<类型形参>{

    方法名(类型形参 类型形参实例);

  }

示例:

/**
 * 创建一个泛型接口
 *
 *
 * @param <T>
 */
public interface interface1<T>{
    
    //定义一个方法  其中返回值是任意类型,参数类型也可以是任意类型的参数
    public T fun(T t);
}
/**
 * 
 * 创建一个类实现泛型接口
 *
 * @param <T>
 */
public class Demo2<T> implements interface1<T> {

    public static void main(String[] args) {
        
        Demo2 demo2 = new Demo2();
        String str =  (String) demo2.fun("123");
        System.out.println(str);
    
    }

    @Override
    public T fun(T t) {
        return t;
    }

}

控制台输出的结果为:123

泛型类:

    泛型类就是具有一个或者多个类型参数的类

语法:

  public class 类名<类型形参>{

    方法名(类型形参 类型形参实例){

      方法执行体

·    }

  }

示例:

/**
 * 泛型类
 * 
 *
 * @param <T>
 */
public class Demo3<T> {
    
    /**
     *     有参有返回值的泛型方法 
     *     输入什么,返回什么
     * @param t
     * @return
     */
    public T fun(T t){
        return t;
    }
        
}

  

泛型方法

    泛型方法就是带有类型参数的方法

语法:

  修饰符<类型形参> 返回值 方法名(任意对象的形参,参数){

    方法体

  }

 

示例:

    /**
     *     有参有返回值的泛型方法 
     *     输入什么,返回什么
     * @param t
     * @return
     */
    public T fun(T t){
        return t;
    }

泛型继承

    面向对象的特性同样适用于泛型类,所以泛型类也可以被继承

    继承了泛型类的子类,必须也是泛型类

 语法:

  clas 子类<T> extends 父类<T>{

  }

原文地址:https://www.cnblogs.com/sloth-007/p/10644987.html