java怎么把数据库的东西导入LIST中

java怎么把数据库的东西导入LIST中,第1张

本例使用 mysql 数据库,演示将数据库 test 的 tb_users 表中的用户信息存储到 List 中

代码如下:

import java.sql.Connection

import java.sql.DriverManager

import java.sql.ResultSet

import java.sql.SQLException

import java.sql.Statement

import java.util.ArrayList

import java.util.List

// 用户类,存储单个用户信息

class User {

private int id

private String name

public User(int id, String name) {

this.id = id

this.name = name

}

public int getId() {

return id

}

public void setId(int id) {

this.id = id

}

public String getName() {

return name

}

public void setName(String name) {

this.name = name

}

@Override

public String toString() {

return "User [id=" + id + ", name=" + name + "]"

}

}

public class Demo1 {

public static void main(String[] args) throws ClassNotFoundException, SQLException {

// 本例使用 mysql 数据库,演示将数据库 test 的 tb_users 表中的用户信息

// 放到 List 中

// 加载数据驱动

Class.forName("com.mysql.jdbc.Driver")

// 数据库连接字符串, 此例数据库为 test

String url = "jdbc:mysql://localhost:3306/test"

String user = "root" // 数据库用户名

String password = "" // 数据库密码

// 打开一个数据连接

Connection conn = DriverManager.getConnection(url, user, password)

Statement stmt = conn.createStatement()

// 获取表 tb_users 所有用户信息到结果集中

ResultSet rs = stmt.executeQuery("SELECT id, name FROM tb_users")

// 定义一个存放用户信息的 List

List<User> users = new ArrayList<>()

// 提取用户信息,并将用户信息放入 List

while (rs.next()) {

// 获取用户ID

int id = rs.getInt(1)

// 获取用户名

String name = rs.getString(2)

users.add(new User(id, name))

}

rs.close()

stmt.close()

conn.close()

// 显示用户信息

for (User u : users) {

System.out.println(u)

}

}

}

Java的集合类都位于java.util包中,Java集合中存放的是对象的引用,而非对象本身。\x0d\x0a\x0d\x0aJava集合主要分为三种类型:\x0d\x0aa.Set(集):集合中的对象不按特定方式排序,并且没有重复对象。它的有些实现类能对集合中的对象按特定方式排序。\x0d\x0ab.List(列表):集合中的对象按索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象。\x0d\x0ac.Map(映射):集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复。它的有些实现类能对集合中的键对象进行排序。\x0d\x0a\x0d\x0aSet、List和Map统称为Java集合。\x0d\x0a\x0d\x0a1.Set(集)\x0d\x0aSet集合中的对象不按特定方式排序,并且没有重复对象。Set接口主要有两个实现类HashSet和TreeSet。HashSet类按照哈希算法来存取集合中的对象,存取速度比较快。HashSet类还有一个子类LinkedHashSet类,它不仅实现了哈希算法,而且实现了链表数据结构。TreeSet类实现了SortedSet接口,具有排序功能。\x0d\x0a\x0d\x0aSet的add()方法判断对象是否已经存在于集合中的判断流程:\x0d\x0aboolean isExists = false\x0d\x0aIterator it = set.iterator()\x0d\x0awhile(it.hasNext()){\x0d\x0a Object object = it.next()\x0d\x0a if(newObject.equals(oldObject)){\x0d\x0a isExists = true\x0d\x0a break\x0d\x0a }\x0d\x0a}\x0d\x0a\x0d\x0a2.HashSet类\x0d\x0a当HashSet向集合中加入一个对象时,会调用对象的hashCode()方法获得哈希码,然后根据这个哈希码进一步计算出对象在集合中的存放位置。\x0d\x0a\x0d\x0a当Object1变量和object2变量实际上引用了同一个对象,那么object1和object2的哈希码肯定相同。\x0d\x0a\x0d\x0a为了保证HashSet能正常工作,要求当两个对象用equals()方法比较的结果为相等时,它们的哈希码也相等。即:\x0d\x0acustomer1.hashCode() == customer2.hashCode()\x0d\x0a\x0d\x0a如:对应于Customer类的以下重写后的equals()方法:\x0d\x0a\x0d\x0apublic boolean equals(Object o){\x0d\x0a if(this==o) return true\x0d\x0a if(!o instanceof Customer) return false\x0d\x0a final Customer other = (Customer)o\x0d\x0a if(this.name.equals(other.getName())&&this.age==other.getAge())\x0d\x0a return true\x0d\x0a else \x0d\x0a return false\x0d\x0a}\x0d\x0a\x0d\x0a为了保证HashSet正常工作,如果Customer类覆盖了equals()方法,也应该覆盖hashCode()方法,并且保证两个相等的Customer对象的哈希码也一样。\x0d\x0a\x0d\x0apublic int hashCode(){\x0d\x0a int result\x0d\x0a result = (name==null?0:name.hashCode())\x0d\x0a result = 29*result+(age==null?0:age.hashCode())\x0d\x0a return result\x0d\x0a}\x0d\x0a\x0d\x0a3.TreeSet类\x0d\x0a\x0d\x0aTreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。TreeSet支持两种排序方式:自然排序和客户化排序,在默认情况下TreeSet采用自然排序方式。\x0d\x0a\x0d\x0aa.自然排序\x0d\x0a在JDK中,有一部分类实现了Comparable接口,如Integer、Double和String等。Comparable接口有一个compareTo(Object o)方法,它返回整数类型。对于表达式x.compareTo(y),如果返回值为0,表示x和y相等,如果返回值大于0,表示x大于y,如果返回值小于0,表示x小于y。\x0d\x0a\x0d\x0aTreeSet调用对象的compareTo()方法比较集合中对象的大小,然后进行升序排列,这种排序方式称为自然排序。\x0d\x0a\x0d\x0a以下列出了JDK中实现了Comparable接口的一些类的排序方式\x0d\x0a类 排序\x0d\x0aBigDecimal\BigInteger\Byte\Double\Float\Integer\Long\Short 按数字大小排序\x0d\x0aCharacter按字符的Unicode值的数字大小排序\x0d\x0aString 按字符串中字符的Unicode值排序\x0d\x0a\x0d\x0a使用自然排序时,只能向TreeSet集合中加入同类型的对象,并且这些对象的类必须实现了Comparable接口,否则会在第二次调用TreeSet的add()方法时,会抛出ClassCastException异常。\x0d\x0a\x0d\x0a例如:\x0d\x0a以下是Customer类的compareTo()方法的一种实现方式:\x0d\x0apublic int compareTo(Object o){\x0d\x0a Customer other = (Customer)o\x0d\x0a \x0d\x0a //先按照name属性排序\x0d\x0a if(this.name.compareTo(other.getName())>0) return 1\x0d\x0a if(this.name.compareTo(other.getName())other.getAge()) return 1\x0d\x0a if(this.age0) return -1\x0d\x0a if(c2.getName().compareTo(c2.getName()) 回答于 2022-12-11

要从一个List中取值,可以使用get()方法来获取指定索引位置的元素。在你提供的代码中,generatePonits()方法返回的是一个String类型的List,包含多个由随机生成的坐标组成的字符串。

如果你想要在另一个方法中分别提取出两个随机数,可以先通过get()方法获取对应索引位置的坐标字符串,然后再将其解析为数字。具体步骤如下:

```java

// 获取generatePonits()方法随机生成的第一个坐标字符串,并将其解析为数字

String point1Str = generatePonits().get(0)

int x1 = Integer.parseInt(point1Str.substring(1, point1Str.indexOf(",")))

int y1 = Integer.parseInt(point1Str.substring(point1Str.indexOf(",") + 1, point1Str.length() - 1))

// 获取generatePonits()方法随机生成的第二个坐标字符串,并将其解析为数字

String point2Str = generatePonits().get(1)

int x2 = Integer.parseInt(point2Str.substring(1, point2Str.indexOf(",")))

int y2 = Integer.parseInt(point2Str.substring(point2Str.indexOf(",") + 1, point2Str.length() - 1))

```

以上代码假设你想要获取generatePonits()方法随机生成的第一个和第二个坐标,并将它们包含的x和y坐标分别解析为整数。这里使用了String类的substring()方法来截取坐标字符串中的x和y坐标部分,并用Integer类的parseInt()方法将它们解析为整数。需要注意的是,由于坐标字符串的格式是"(x,y)",因此在使用substring()方法时需要去掉开头的"("和结尾的")"。

当然,如果你仅仅只是想在generatePonits()方法和另一个方法之间传递生成的随机数,也可以考虑将它们定义为类成员变量,而不是在generatePonits()方法内部声明。这样就可以在不同的方法之间共享这些随机数了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9894797.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存