java复习

1、string、stringbuffer,strigBuilder区别

  •   string只读字符串,引用的字符串内容不可以改变
  • stringBuffer、StringBuilder表示字符串对象,可以进行修改
  • StringBuilder是单线程环境使用没有synchronized修饰,StringBuffer多线程使用

2、 抽象类和接口的对比

3、 JDK的源码需要阅读的:

    String  Integer  Long   ArrayList  LinkedList  HashSet  HashMap  ConcurrentHashMap

4:集合  
   Collection(单例集合)  
    List(有序,可重复)  
     ArrayList  
     底层数据结构是数组,查询快,增删慢  
     线程不安全,效率高  
     Vector  
     底层数据结构是数组,查询快,增删慢  
     线程安全,效率低  
     LinkedList  
     底层数据结构是链表,查询慢,增删快  
     线程不安全,效率高  
    Set(无序,唯一)  
     HahsSet(无序,唯一)  
       底层数据结构是哈希表  
       哈希表依赖于两个方法:hashCode()和equals()  
       执行顺序:  
        首先判断hashCode()值否相同  
        是:继续执行equals,看其返回值  
        是true:说明元素重复,不添加  
        是false:就直接添加到集合中  
        否:直接添加到集合中  
        最终:自动生成即可  
     LinkedHashSet:  
       底层数据结是由链表和哈希表组成  
         由链表保证元素的排序  
          由哈希表证元素的唯一性  
     TreeSet(有序,唯一)  
       底层数据结构是红黑数。(是一种自平衡二叉)  
         如保保证元素唯一性呢?  
           根据比较的返回值是否是0来决定  
         如何保证元素的排序呢?  
           两种方式  
           自然排序(元素具备比较性)  
            让元素所属的类实现Comparable接口  
            比较器排序(集合具备比较性)  
            让集合接收一个Comparator的实现类对象                
    Map(双例集合)  
        A:Map集合的数据仅仅针对键有效,与值无关。  
        B:存储的是键值对形式的元素,键唯一,值可重复  
      
     HashMap  
     底层数据结构是哈希表  
      哈希表依赖于两个方法:hashCode()和equals()  
      执行顺序:  
      首先判断hashCode()值否相同  
      是:继续执行equals,看其返回值  
      是true:说明元素重复,不添加  
      是false:就直接添加到集合中  
      否:直接添加到集合中  
      最终:自动生成即可  
     LinkedHashMap  
     底层数据结是由链表和哈希表组成  
     由链表保证元素的排序  
     由哈希表证元素的唯一性  
     Hashtable  
      底层数据结构是哈希表  
      哈希表依赖于两个方法:hashCode()和equals()  
      执行顺序:  
      首先判断hashCode()值否相同  
      是:继续执行equals,看其返回值  
      是true:说明元素重复,不添加  
      是false:就直接添加到集合中  
      否:直接添加到集合中  
     最终:自动生成即可  
    TreeMap  
      底层数据结构是红黑数。(是一种自平衡二叉)  
      如保保证元素唯一性呢?  
      根据比较的返回值是否是0来决定  
      如何保证元素的排序呢?  
      两种方式  
      自然排序(元素具备比较性)  
      让元素所属的类实现Comparable接口  
      比较器排序(集合具备比较性)  
      让集合接收一个Comparator的实现类对象  
      
2:到底使用那种集合  
    看需求。 
    是否是键值对象形式:  
    是:Map  
    键是否需要排序:  
    是:TreeMap  
    否:HashMap  
    不知道,就使用HashMap。  
              
     否:Collection  
     元素是否唯一:  
     是:Set  
     元素是否需要排序:  
     是:TreeSet  
     否:HashSet  
     不知道,就使用HashSet  
     否:List  
     要安全吗:  
      是:Vector  
      否:ArrayList或者LinkedList  
      增删多:LinkedList  
      查询多:ArrayList  
      不知道,就使用ArrayList  
      不知道,就使用ArrayList  
              
3:集合的常见方法及遍历方式  
    Collection:  
     add()  
     remove()  
     contains()  
     iterator()  
     size()  
    遍历:  
     增强for  
     迭代器       
       |--List  
         get()   
       遍历:  
        普通for  
        |--Set  
    Map:  
        put()  
        remove()  
        containskey(),containsValue()  
        keySet()  
        get()  
        value()  
        entrySet()  
        size()   
        遍历:  
            根据键找值  
            根据键值对对象分别找键和值

5、素数最优解算法

package ch15;
public class Prime {
//主方法
public static void main(String[] args) {
//遍历 1 到 100
for (int i = 1; i < 100; i++) {
if (isPrime(i)) {
//判断是否为素数
System.out.println(i);
//打印素数
}
}
}
//判断一个整数是不是素数的方法
private static boolean isPrime(int num) {
if(num == 1)
//1 不是素数,直接返回 false
return false;
//从 2 开始到该整数的 2 次根之间遍历
long sprtNum = (long) Math.sqrt(num); //得到该数字的 2 次根
for (int i = 2; i <= sprtNum; i++) {
if (num % i == 0) {
//判断是否能除尽
return false;
//返回 false
}
}
return true;
//返回 true
}
}

 

6、九九乘法最优解
package ch15;
public class NineNineMulitTable {
// 主方法
    public static void main(String[] args) {

    //循环,初始化 i 和 j 为 1
    for (int i = 1, j = 1; j <= 9; i++) {
    //间隔打印它们每一项的
    System.out.print(i + "*" + j + "=" + i * j + " ");
    if (i == j) { //判断是否该换行
    i = 0; //将 i 值赋为 0
    j++; //j 自加 1
    System.out.println(); //换行
        }
     }
 } 
}
7、
 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值