javaEE总结_week4

Character类:

 概述:char类型的包装类类型:

** 构造方法:**

Character (char value): //将一个char类型转换成Character 类对象

** 常用方法:**

  判断字符是否为字母大写:
  public static boolean isUpperCase(char ch)
  
  判断字母字符是否为小写:
  public static boolean isLowerCase(char ch)
  
  判断字符是否为数字字符:
  public static boolean isDigit(char ch)

Data类:

** 构造方法:**

 public Data(): 无参构造: 创建日期对象,获取当前系统时间日期格式
 public Data(long date): 创建日期对象,和1970年1月1日时间有关系

** 成员方法:**

 public long getTime():  //获取时间的毫秒值
Date重点:日期文本格式和Date如何转换?

 *     String日期文本格式  "2022-8-13"------>java.util.Date 日期格式
 *      Date日期格式 转换成   String
 *
 *    使用中间桥梁:DateFormat类 是一个抽象类,不能实例化,jdk提供更具体的子类:SimpleDateFormat
 *
 *      构造方法
 *             public SimpleDateFormat(String
 pattern)
 *              yyyy:年  MM:月  dd:月中日期  HH:小时  mm:分钟  ss:*
 *        成员方法:
 *              Date---->String    
 public String foramt(Date date) :格式化
 *
 *              String--->Date:    
 public Date  parse(String Str) throws ParseException: 解析
 *                                  这个本身可能出现异常,如果解析的字符串的格式和 pattern参数的模式匹配,就出错了,解析失败!

Random类:

** 概述:随机数生成器**

构造方法:

创建随机数生成器对象:然后调用方法 
  1) Random(),无参构造之后调用nextInt()/nextInt(int n);//每次产生的随机数不同
  2)Random(long seed):调用nextInt()/nextInt(int n);//每次产生的随机数相同(不推荐)
成员方法:
 int nextInt():int类型的范围获取
 int nextInt(int n): 取值范围[0,n)

实际用途:
有一个集合,集合里面存储的随机数,而且保证集合的元素必须唯一,将元素一一遍历出来;

  •     List<Integer>:集合可以重复
    
  •        Set:集合不可以重复
    

System类

常用功能:

    1)public static void exit(int status): //参数为0,退出Jvm(正常终止),如果参数不为0,属于异常终止;
    2)public static long currentTimeMillis(): //获取当前系统时间毫秒值
     //场景;后面使用IO流传输文件 查看所耗时间(比较耗时的操作)
     3) public static void arraycopy(Object str, (原数组)
           int srcPos,      (原数组中的某个位置)
           Object dest,    (目标数组)
           int destPos,    (目标数组位置)
           int length        (复制的长度)
           )      //复制数组的一部分
     4)public static void gc():  //手动开启垃圾回收器,回收没有更多引用的对象,实际会调用Object类的finalize()方法  (一般不怎么使用)

集合:

面试题:(数组和集合的区别)
   1)长度(容量) 的区别:
       数组长度固定;
       集合长度可变;
   2)存储数据类型的区别:
      数组可以存储java中的任意数据类型(基本数据类型,引用数据类型)
      集合:只能存储引用数据类型;
  3)存储元素的区别:
     数组:这个容器只能存储同一种数据类型的元素
     集合:可以存储不同引用数据类型的元素
collection:集合的顶层次的根接口:

** 集合中常用的操作方法:**

boolean  add(E e):E------->Element:元素---->理解为Object任何java引用类型
boolean constants(Object o):判断集合中元素是否包含某元素
boolean isEmpty():判断集合是否为空
int size();  获取集合中元素个数
Object[] toArray():  将集合转换成对象数组
void remove(Object o):移除集合中指定的元素
void clear():  清空集合

Iterator迭代器:

迭代器:-------是集合遍历元素的一种专有方式
迭代器的使用原理:(大致翻阅源码)

 
//迭代器接口
interface Iterator<E>{
        boolean hasNext(); //判断是否有下一个元素可以迭代(遍历)
        E next(); //获取下个元素
}
//规定获取迭代器的方法
public interface Iterable<T>{   //最顶层次的接口
        Iterator<E> iterator();//获取集合迭代器的
}
//接口
interface Collection<E> extends Iterable<T> // T --->Type类型 {
        Iterator<E> iterator();//获取集合迭代器的           继承父接口过来的
}

//子接口
interface List<E>  extends Collection<E>{
        //iterator()继承过来

}
//具体的实现类
class ArrayList<E> implements List<E>{
    //将父接口--->继承的父接口----里面所有的抽象方法都重写
        public Iterator<E> iterator() { //具体的子类实现类这个方法
                return new Itr();
        }

        //私有的成员内部类
        private class Itr implements Iterator<E> { //实现迭代器接口的方法
    
        Itr() {}
    
        public boolean hasNext() { //实现了迭代器hasNext()是否有下一个元素
           ...
        }
    
        @SuppressWarnings("unchecked")  //jdk提供的注解@SuppressWarnings:压制警告的
        public E next() {       //实现了获取下一个元素的方法
                ...
        }
}

Iterator<引用类型> 集合迭代器对象 =  collection集合对象.iterator() ;
本质就是实现了Iterator接口的子实现类,具体的类名是ArrayList集合的内部类Itr来实现的;

** list集合的三个子实现类的特点:**

   1)ArrayList: 底层是数组(普遍使用,效率高,不安全)
   2)LinkedList:底层是链表(添加,删除/修改比较快,查询比较慢的)
   3)Vector: 底层是数组(效低  ,安全)
集合常见的五种遍历方式:

  //toArray()转换对象数组遍历(方法一)
  List<String> list = new List<>();
  c.add("元素");
  Object[] obj  = list.toArray();
  for(int x=0 ;  x<obj.length; x++){
     String s = (String)obj[x]; //强制类型转换
     System.out.println(s);
  
  }
  //普通for循环实现(方式二)
  for(int x = 0; x<list.size(); x++){
  
  System.out.println(list.get(x));

  }
  //Collection迭代器(方式三)
  Iterator<String> it =  list.iterator(); ///集合对象调用迭代器
  while(it.hasNext()){     //z判断是否有下个元素
  System.iout.println(it.next());
  
  }
  //List集合的专有迭代器(方式四)
  ListIterator<String> lt = list.iterator<>();
  while (lt.hasNext()){
  
  System.out.println(it.next());
  }
  //ListIterator子接口提供的反向遍历
ListIterator<String> lt = list.iterator();
while(lt.hasPrevious()){
System.out.println(lt.previousNext());

}
//增强for循环(方式五)
for(String s:list){
System.out.println(s);
}

集合去重:(面试题)

思路:
1)假设就创建了List集合对象,里面存储的字符串数据
2)创建一个新的空List集合
3)遍历以前的集合,获取以前的集合所有元素并在新的集合中加判断,如果新的集合中没有就添加,否则不添加
4)最终,遍历新的集合,就是一个不重复的新集合

  //代码实现
  List<String> list = new ArrayList<>();
  list.add("元素");
   List<String> newList = new ArrayList<>();
   for(String s:list){
   while(!newList.contains(list)){ //判断内容是否唯一,
   newList.add(s);
     }
   }
   for (String s1 : newList){    System.out.println(s1);
   }

注意:
此处使用的是String类,是jdk提供的该类已经实现了equals()和hasCode()方法,如果是自动定义类的话,就需要在自定义类中实现equals()方法和hasCode()方法;
此处查重时用到的 contains(Object o),而该方法底层依赖于indexOf():
public boolean contains(Object o ){
return indexOf(o); //查询元素
}
indexOf()方法又依赖于Object类的equals()方法,所以最终比较的是字符串的内容而并不是地址;

public int indexOf(Object o) {

if (o == null) { // 查找的元素为空

for (int i = 0; i < size; i++) // 遍历数组,找到第一个为空的元素,返回下标

if (elementData[i]==null)

return i;

} else { // 查找的元素不为空

for (int i = 0; i < size; i++) // 遍历数组,找到第一个和指定元素相等的元素,返回下标

if (o.equals(elementData[i]))

return i;

}

return -1;

}


选择排序:

思想:

  先在未排序序列中选择索引为0的元素,然后拿出来与后面的元素序列一一比较,小的替换到前面,大的往后面替换,总共需要比较length-1 次;
     //代码体现   
     public class SelectSort { 
     public static void main(String[] args) {        int[] srr = {1,5,6,5,8,7};       
     int[] ints = selectSort(srr);        
     
     System.out.println(Arrays.toString(ints));  
     }    
     public static int[] selectSort(int[] arr){      
     for (int x=0;x<arr.length-1;x++){           
     for (int y = x+1;y<arr.length;y++){                if (arr[x]>arr[y]) {                   
     int temp = arr[x];                  
     arr[x] = arr[y];                   
     arr[y] = temp;               
          }        
     
         }      
     }        return arr;   
     }}



Vector:

概述:

 Vecter集合,底层数据结构是  数组;是List集合接口的子实现了之一,遍历元素可以已使用List集合的五中遍历方式,但是他有自己独有的功能;
 添加元素:
    public void addElement(E object):添加任意元素 如果E类型确定了,就只能添加这个数据两类型
   遍历元素方式1
      public Enumeration<E> elements():获取组件(返回值是枚举接口---产生一系列元素)
           类似于Collection集合的Iterator iterator()迭代器
    Enumeration枚举接口
                          boolean hasMoreElements()  判断是有更多的元素
                                       --->类似于Iterator迭代器里面的hasNext()
     E nextElement() :获取下个元素
                                       --->类似于Iterator迭代器里面的next():获取下一个元素
  遍历元素方式2

          public E elementAt(int index)通过角标获取元素 ---类似于List集合的public E get(int index)
          结合 int size()获取集合长度(集合元素数量)

这个集合特点:底层数据结构数组(查询,更新元素比较快,添加,删除比较麻烦的),
 线程安全的类---同步的---执行效率比较低(多线程环境下使用安全性比较大的类)

LinkedList集合

概述:
LinkedList集合:底层数据结构是一种链表,链表的**特点: **查询慢(每次需要冲链表头查询到末尾),
增删快;
线程不安全的,不同步,执行比较高!

** 特有功能:**

        public void addFirst(E e):添加到链表的开头
        public void addLast(E e):添加到链表的末尾
       public E getFirst():获取链表的第一个元素
       public E getLast():获取链表的末尾的元素
       public E removeFirst():删除链表第一个元素
       public E removeLast():删除链表的最后一个元素
       public void push(E e):推送到链表开头(压栈)---等价于public void addFirst(E e):添加到链表的开头
       public E pop():弹出最后一个元素(弹栈) 等于removeFirst() :将第一个元素删除并返回

set集合

Set集合的特点:
保证元素唯一,而且不能保证迭代次序
唯一,无序性(元素不重复,不能保证顺序—哈希表(key-value键值对)完成的(桶状结构))

      创建HashSet(Set接口的子实现类之一)集合对象来存储String类型,重复的数据,看效果


      为什么保证元素能唯一的:
      HashSet底层依赖于Map<K,V>接口的子实现类HashMap<K,V>实现的

      HashSet的add()方法依赖于HashMap的put 方法,这个方法间接依赖于Object类的equals和hashCode()
      而现在存储String类型,String底层已经重写了hashCode()和equals方法
      HashCode:比较字符串的哈希码值(理解为地址值)是否一样,如果一样,比较内容是否一样
           英文可以,但是中文,繁写字体或简写字体,hashCode一样,内容可能不一样;必须重写equals,比较内容是否相容!



  HashSet<Student>如果存储的是自定义对象,必须自定义的类要重写Object类的equals和hashCode(),否则不是唯一的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值