标签: arraylist

将Java结果集转换为String数组

我正在编写一个程序,它将查询MS访问数据库,将查询作为结果集返回,然后我想最终将该结果集转换为String数组,以便我可以将它传递给Swing JComboBox的构造函数 - 所以ComboBox将列出查询返回的项目.

我已经能够将结果集的行存储到ArrayList中,然后将该ArrayList转换为对象数组,组合框将列出正确的项目,但作为对象.我根本无法将ArrayList转换为String数组.有谁知道这是否可能?这是我的一些代码......

// Convert the Resultset into an array list

public ArrayList<ArrayList<Object>> Results2Array(ResultSet rs) throws SQLException {
    ResultSetMetaData metaData = rs.getMetaData();
    int columns = metaData.getColumnCount();

    ArrayList<ArrayList<Object>> al = new ArrayList<ArrayList<Object>>();

    while (rs.next()) {
        ArrayList<Object> record = new ArrayList<Object>();

        for (int i = 1; i <= columns; i++) {
            Object value = rs.getObject(i);
            record.add(value);
        }
        al.add(record);
    }
    return al;
}

// Convert ArrayList to Object Array, and pass into GUI

ArrayList<String> Locations = new ArrayList<String>();
ArrayList<String> Months = …
Run Code Online (Sandbox Code Playgroud)

java swing arraylist resultset

9
推荐指数
2
解决办法
5万
查看次数

ArrayList - 添加"相同"对象(same => equals,hashCode),Threads

我有一个问题.当我尝试将"相同"对象两次添加到ArrayList时会发生什么."相同"是指单个类的对象,使用equals()和hashCode()标识为相同.它对于大多数成员变量具有不同的值,并且可能是从不同的线程创建的,但对于equals()和hashCode(),它们是"相同的".第二个对象是否会替换第一个对象?

另外,如果两个线程试图将这些对象完全同时添加到ArrayList会发生什么?这甚至可能吗?如果是,会发生什么?

谢谢!:-)

[编辑]感谢所有的答案!我应该使用synchronizedList,而不是使用"synchronize(list){}"吗? - >我读了docs,即使是使用synchronizedList,也可以使用迭代同步(list)

[EDIT2] synchronizedList可以声明为成员变量吗?我试过了,但它没有用.

java multithreading equals arraylist hashcode

9
推荐指数
2
解决办法
3万
查看次数

ArrayList效率和大小

我想要明确一些事情:当使用arraylist时,它以10个元素的大小开始.如果需要自动增加,它会将整个arrayList重写为2/3更大.

如果我正在查看最终大小为50-120的列表,那么更好的是:

  1. 立即创建它大小150并且有很多未使用的空间
  2. 允许列表自动增加几次?

谢谢

java arraylist

9
推荐指数
2
解决办法
5042
查看次数

从Android中的ArrayList中删除重复的对象

我知道这已经在这里一遍又一遍地讨论,但我尝试过的所有例子都没有为我工作.

我得到了什么

我从Android访问呼叫日志,我得到了所有呼叫的列表.当然,在这里我得到了很多重复.首先我制作一份清单

List<ContactObject> lstContacts = new ArrayList<ContactObject>();
Run Code Online (Sandbox Code Playgroud)

然后我在其中添加对象

While (get some record in call log)
{
    ContactObject contact = new ContactObject();
    contact.SetAllProperties(......)  
    lstContacts.add(contact);  
}

Set<ContactObject> unique = new LinkedHashSet<ContactObject>(lstContacts);
lstContacts = new ArrayList<ContactObject>(unique);
Run Code Online (Sandbox Code Playgroud)

Contact Object类很简单

public class ContactObject {

    public ContactObject() {
        super();
    }

 @Override
 public boolean equals(Object obj) {
     if (!(obj instanceof ContactObject))
        return false;

     return this.lstPhones == ((ContactObject) obj).getLstPhones(); 
 }

 @Override
 public int hashCode() {
     return lstPhones.hashCode();
 }

    private long Id;
    private String name;
    private List<String> lstPhones; …
Run Code Online (Sandbox Code Playgroud)

java android arraylist hashcode treeset

9
推荐指数
2
解决办法
1万
查看次数

将ArrayList作为参数传递

首先让我说我不能在这里放任何代码,因为我的笔记本电脑上的互联网不能工作,所以我通过手机发布这个.好吧问题是我说有两个类:第一和第二类.第一类有一个ArrayList属性,它从类2中调用void方法并将其ArrayList作为参数传递.现在该方法初始化另一个方法ArrayList并使其等于我传递的参数并对该新方法进行更改ArrayList.有趣的是,即使我作为参数传递的原始ArrayList也在改变.可能的原因是什么?

java arrays arraylist

9
推荐指数
1
解决办法
7万
查看次数

如何在java中找到两个时间戳的区别?

我有一个ArrayList包括几个时间戳的目标是找到第一个和最后一个元素的差异ArrayList.

String a = ArrayList.get(0);
String b = ArrayList.get(ArrayList.size()-1);
long diff = b.getTime() - a.getTime();
Run Code Online (Sandbox Code Playgroud)

我也将类型转换为int但仍然给我一个错误The method getTime is undefined for the type String.

附加信息 :

我有一个A类,其中包括

String timeStamp = new SimpleDateFormat("ss S").format(new Date());
Run Code Online (Sandbox Code Playgroud)

并且有一个B类有一个方法 private void dialogDuration(String timeStamp)

和dialogueDuration方法包括:

String a = timeSt.get(0); // timeSt  is an ArrayList which includes all the timeStamps
String b = timeSt.get(timeSt.size()-1);   // This method aims finding the difference of the first and the last elements(timestamps) …
Run Code Online (Sandbox Code Playgroud)

java datetime arraylist date-difference

9
推荐指数
2
解决办法
7万
查看次数

为什么Java List遍历比文件readline慢?

我有这段代码:

while((line=br.readLine())!=null)
        {
            String Words[]= line.split(" ");
            outputLine = SomeAlgorithm(Words);
            output.write(outputLine);
        }
Run Code Online (Sandbox Code Playgroud)

正如您在上面的代码中所看到的,对于输入文件中的每一行,我正在读取一行,在其上运行一些算法,它基本上修改了该行,然后将输出行写入某个文件.

文件中有9k行,整个程序在我的机器上花了3分钟.

我想,好吧,我正在为算法的每个(行)运行做2个I/O. 所以我做了大约18k I/O. 为什么不首先收集所有行ArrayList,然后遍历列表并在每行上运行算法?还将每个输出收集到一个字符串变量中,然后在程序结束时写出所有输出一次.

这样,我整个程序总共有2个大I/O(18k小文件I/O到2个大文件I/O).我觉得这会更快,所以我写了这个:

List<String> lines = new ArrayList<String>();
while((line=br.readLine())!=null)
        {
            lines.add(line); // collect all lines first
        }

for (String line : lines){
    String Words[] = line.split(" ");
    bigOutput+=SomeAlgorithm(Words); // collect all output
}

output.write(bigOutput);
Run Code Online (Sandbox Code Playgroud)

但是,这件事需要7分钟!

那么,为什么循环遍历ArrayList要慢于逐行读取文件?

注意:通过readLine()收集所有行并写入bigOutput都只需要几秒钟.SomeAlgorithm()也没有变化.所以,当然,我认为罪魁祸首是for (String line: lines)

更新:正如下面各种评论中所提到的,问题不在于ArrayList遍历,而是使用+ =累积输出的方式.转移到StringBuilder()确实给出了比原始结果更快的结果.

java algorithm arraylist

9
推荐指数
1
解决办法
346
查看次数

声纳 - 存储副本 - 不应直接存储或返回可变成员

我有一个列表,它是我班上的私人成员。我使用 getter 和 setter 来获取和设置值。SOnar 引发错误 - 不应直接存储或返回可变成员。

例如:ABC 和 DEF 是两个类。

class ABC{
private List<DEF> defList;
public List<DEF> getDefList() { return defList; }
public void setDefList(List<DEF> defList) { this.defList = defList; }
Run Code Online (Sandbox Code Playgroud)

经过大量的谷歌搜索和搜索,我了解到可以按如下方式更改 getter:

public List<DEF> getDefList() { return new ArrayList<>(defList); }
Run Code Online (Sandbox Code Playgroud)

当我尝试类似地使用 setter 时,

public void setDefList(List<DEF> defList) { this.defList.addAll(defList); }
Run Code Online (Sandbox Code Playgroud)

然后变量开始显示

'private field 'defList' is never assigned.
Run Code Online (Sandbox Code Playgroud)

我可以知道当它是一个列表时的正确方法吗(另一个类的列表)

注意:Prasad Karunagoda 和 Leo Aso 的答案都有效。我不能将两者都标记为已接受的答案。所以在这里做个笔记

java arraylist mutable sonarqube

9
推荐指数
1
解决办法
1万
查看次数

将 Array&lt;String&gt; 转换为 ArrayList&lt;String&gt;

如何在 Kotlin 中转换Array<String>为ArrayList<String>?

var categoryList : ArrayList<String>?=null
val list = arrayOf("None", "ABC")
categoryList = ArrayList(Arrays.asList(list))
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

错误

Type inference failed. Expected type mismatch: inferred type is kotlin.collections.ArrayList<Array<String>!> /* = java.util.ArrayList<Array<String>!> */ but kotlin.collections.ArrayList<String>? /* = java.util.ArrayList<String>? */ was expected
Run Code Online (Sandbox Code Playgroud)

arraylist kotlin

9
推荐指数
1
解决办法
6522
查看次数

使用 Dart 有条件地返回 Map() 中的元素

假设我有一个可迭代对象(可以是映射(键)、列表、集合等),并且希望使用 Map() 将其转换为具有函数 f 的另一个可迭代对象。然而,我希望 f 在转换后仅在满足条件时返回一个值。

List<int> a = [1,2,3,4,5,6];
List<int> b = a.map((e) => (e % 2 == 0) ? e * 10 : null);

assert(b == [20,40,60]);
Run Code Online (Sandbox Code Playgroud)

然而,这会返回一个错误,就像map中带有mapEntry的任何类似的等效项一样,例如:

Map<int, String> a = {1:a, 2:b, 3:c, 4:d, 5:e, 6:f};
Map<int, String> b = a.map((k,v) => (k % 2 == 0) ? MapEntry(k*10,v) : null);

assert(b.keys.toList<int>() == [20,40,60]);
Run Code Online (Sandbox Code Playgroud)

当然,有一些方法可以通过牺牲效率和简洁性来解决这个问题,即在映射值之前或之后循环遍历它以过滤掉不需要的值。例如:

List<int> b = a.where((e) => e%2).map((e) => e * 10);
List<int> b = a.map((e) => e * 10).where((e) => e%2); …
Run Code Online (Sandbox Code Playgroud)

dictionary iterator arraylist filter dart

9
推荐指数
1
解决办法
1万
查看次数