Day02 Java基础面试(HashMap工作原理、HashMap/HashTable、JDBC)

原创作品,转载注明!!https://blog.csdn.net/qq_31842777/article/details/90199033

一、Java集合框架概述

Java集合框架有两大接口:Collection、Map,一个是元素集合,一个是键值对集合;其中Set、List继承了Collection,Set是无序元素集合,List是有序元素集合,HashSet实现了Set,ArrayList、LinkedList实现了List;HashMap、HashTable实现了Map,HashTable线程安全,但HashMap效率更高一点。

二、HashMap工作原理

HashMap的底层是用hash数组和单向链表实现的 ,当调用put方法是,首先计算key的hashcode,定位到合适的数组索引,然后再在该索引上的单向链表进行循环遍历用equals比较key是否存在,如果存在则用新的value覆盖原值,如果没有则向后追加。HashMap的两个重要属性是容量capacity和加载因子loadfactor,默认值分布为16和0.75,当容器中的元素个数大于 capacity*loadfactor时,容器会进行扩容resize 为2n。

ps:hasCode()/equals()方法: hasCode()方法定为元素存放的位置,equals()比较key的存在性。

三、HashMap/HashTable

HashMap/HashTable都是Map的实现类。主要有以下区别:
1、HashMap允许键值为null,HashTable不允许;、
2、HashMap线程不安全,HashTable线程安全,所以HashMap效率比HashTable高一点;
3、HashMap是同步的,所以一般HashMap更适用于单线程环境,HashTable更适用于多线程环境。

四、JDBC

1、主要接口及其方法

接口主要方法及应用
DriverManagergetConnection()方法,建立连接,返回Connection对象
ConnectioncreatStatement()/prepareStatement()方法,返回一个Statement对象用于执行SQL语句
StatementexecuteQuery()方法,执行SQL语句(查询语句),返回ResultSet对象
ResultSet保存Statement执行后的结果,使用ResultSet.next()、ResultSet.getString/…/获取结果

2、JDBC连接数据库的过程

步骤语句
加载驱动Class.forName(“com.mysql.jdbc,Driver”)
获取连接对象Connection con=DriverManager.getConnection(url,user,password)
创建执行命令Statement sta=con.createStatement()
执行SQL返回结果集ResultSet rs=sta.executeQuery(sql)//查询 executeUpdate(sql)//增删改
处理结果while(rs.next()){String str=rs.getString();//类型和数据库中变量类型一致,字符串表示变量名}
关闭所有资源(finally语句块中完成) rs.close;//关闭结果集 sta.close();//关闭命令 con.close();//关闭连接

代码示例:

// JDBC连接数据库
import java.sql.*;
public class JavaDataBaseDemo{
     public static void main(String args[]){
          Connection con=null;
          Statement sta=null;
          ResultSet=null;
          try{
               //加载驱动
               Class.forName("com.mysql.jdbc,Driver");
               //获取连接对象
               con=DriverManager.getConnection("jdbc:mysql:DBtest","root","111111");
               //创建执行命令,以执行SQL语句
               sta=con.createStatement();
               //执行SQL查询语句,返回给ResultSet结果集
               rs=sta.executeQuery("SELECT name,age FROM student")
               //处理结果集
               while(rs.next()){
                    String name=rs.getString("name");
                    Int age=rs.getInt("age");
                    System,out,println("Name"+name+"Age"+age);
               }
           catch(SQLException e){
                  System,out,println("SQL异常");
           }
           finally{
                 //关闭结果集
                 if(rs!=null){
                     try{
                         rs.close();
                     }catch(SQLException e){}
                 //关闭命令
                 if(rs!=null){
                     try{
                         sta.close();
                     }catch(SQLException e){}
                  //关闭连接
                  if(rs!=null){
                     try{
                         con.close();
                     }catch(SQLException e){}
           }
          }    
     }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值