标签: arraylist

如何将JDBC ResultSet检索为ArrayList?

我正在进行查询以检索大量ID(整数).而不是通过ResultSet迭代数百万次并将所有内容一个一个地复制到ArrayList,有没有办法简单地将所有内容检索为ArrayList?

我理解ResultSet应该被迭代,因为底层实现可能是缓存内容,但在我的情况下,我只需要立即获取所有ID.我知道我可以将FetchSize设置为一个很大的数字,但是我仍然需要逐个检索ID.

澄清:我想这样做的原因是表现.分析告诉我,数百万次执行ResultSet.next(),ResultSet.getInt()和ArrayList.add()需要相当长的时间.我认为数据库(我使用H2,用Java编写)可能在内存中的某个地方有数组或列表,所以我正在寻找一种方法将它直接复制到我而不是通过ResultSet迭代接口.

java performance jdbc arraylist resultset

15
推荐指数
3
解决办法
4万
查看次数

从Arrays.asList返回的列表是否保持与原始数组集合相同的顺序?

我有一个我正在迭代几次的ArrayList,看起来它没有维持迭代的顺序.我看得更深,似乎为此迭代(由其他人)编写的自定义迭代器标记首先在ArrayList中传递并使用Arrays.asList在迭代之前将其桥接到Object []集合.迭代的顺序是否会丢失?是否与Arrays.asList一起预期?

编辑:

以下是操作对传递给iterator标记的原始集合的作用:

if(collection.getClass().isArray()) {
    iterator = Arrays.asList((Object[]) collection).iterator();
} else if(collection instanceof Collection) {
    iterator = ((Collection) collection).iterator();
} else if(collection instanceof Iterator) {
    iterator = (Iterator) collection;
} else if(collection instanceof Map) {
    iterator = ((Map) collection).entrySet().iterator();
}
Run Code Online (Sandbox Code Playgroud)

java collections arraylist

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

数组列表检索顺序

我有一个java ArrayList,我添加了5个对象.

如果我遍历列表并将其打印出来,则迭代列表并再次打印出来.

这两种情况下的检索顺序是否相同?(我知道它可能与插入顺序不同)

java arraylist

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

使用和声明通用List <T>

所以我在Java工作,我想声明一个通用的List.

所以我到目前为止所做的是 List<T> list = new ArrayList<T>();

但现在我想添加一个元素.我怎么做?通用元素是什么样的?

我尝试过像List.add("x")这样的东西,看看我是否可以添加一个字符串,但这不起作用.

(我没有声明a的原因List<String>是因为我必须将此List传递给另一个仅List<T>作为参数的函数.

java generics list arraylist object

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

在活动之间传递对象的arraylist

我试图在两个活动之间传递一个对象的arraylist,但我的应用程序在第二个活动时崩溃.有人可以帮我解决这个问题......

这是我第一次活动的代码:

Intent i = new Intent();
Bundle b = new Bundle();
b.putParcelableArrayList("songs",(ArrayList<? extends Parcelable>) albumsArray.get(position).getSongs());
Log.v("--", "OK");
i.putExtras(b);
i.setClass(LatestAlbums.this, AlbumDetails.class);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

和第二个活动的代码:

songs=new ArrayList<Songs>();
Bundle b = this.getIntent().getExtras();
if(b!=null)
    songs = b.getParcelable("songs");
Log.v("--", songs.size()+"");
Run Code Online (Sandbox Code Playgroud)

我的logcat输出:

04-03 16:37:03.513: E/AndroidRuntime(6576): FATAL EXCEPTION: main
04-03 16:37:03.513: E/AndroidRuntime(6576): java.lang.RuntimeException: Parcel: unable to marshal value com.musicapp.objects.Songs@419489e8
04-03 16:37:03.513: E/AndroidRuntime(6576):     at android.os.Parcel.writeValue(Parcel.java:1137)
04-03 16:37:03.513: E/AndroidRuntime(6576):     at android.os.Parcel.writeList(Parcel.java:524)
04-03 16:37:03.513: E/AndroidRuntime(6576):     at android.os.Parcel.writeValue(Parcel.java:1097)
04-03 16:37:03.513: E/AndroidRuntime(6576):     at android.os.Parcel.writeMapInternal(Parcel.java:493)
04-03 16:37:03.513: E/AndroidRuntime(6576):     at android.os.Bundle.writeToParcel(Bundle.java:1612)
04-03 16:37:03.513: E/AndroidRuntime(6576): …
Run Code Online (Sandbox Code Playgroud)

android arraylist parcelable android-intent android-activity

15
推荐指数
3
解决办法
6万
查看次数

ArrayList按Id检索对象

假设我有一个ArrayList<Account>非常简单的自定义对象.例如:

class Account
{
public String Name;
public Integer Id;
}
Run Code Online (Sandbox Code Playgroud)

我想Account根据Id应用程序的许多部分中的参数检索特定对象.最好的办法是什么?

我想扩展,ArrayList但我相信必须有更好的方法.

java collections arraylist

15
推荐指数
3
解决办法
4万
查看次数

区分数组列表的容量和数组的大小

我在Core Java I书中阅读了下面的代码片段.

将数组列表分配为 新的ArrayList <'Employee>(100)//容量为100

与新员工[100] //大小为100时分配新数组不同

数组列表的容量与数组的大小之间存在重要区别.如果您分配一个包含100个条目的数组,则该阵列有100个插槽,可供使用.容量为100个元素的数组列表有可能容纳100个元素(实际上,超过100个,以额外的重新分配为代价); 但是在开始时,即使在初始构造之后,数组列表也根本不包含任何元素.

当我看到源代码数组列表时,构造函数创建一个给定容量的Object数组,该数组已准备好容纳给定容量的元素(下面是代码片段).

public ArrayList(int initialCapacity) {
     super();
     if (initialCapacity < 0)
         throw new IllegalArgumentException("Illegal Capacity: "+
                                            initialCapacity);
     this.elementData = new Object[initialCapacity];
 }
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚作者在上面的文字中提到的实际差异.

java arrays arraylist

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

从另一个arraylist中删除一个arraylist元素的最佳方法

Java(7,8)中用于消除彼此integer元素的最佳性能方法是什么Arraylist.所有元素在第一和第二列表中都是唯一的.

目前我知道API方法removeall并以这种方式使用它:

tempList.removeAll(tempList2);
Run Code Online (Sandbox Code Playgroud)

当我操作arraylists有超过10000个元素时出现问题.例如,当我删除65000个元素时,延迟似乎约为2秒.但我需要使用超过1000000个元素的更大的列表进行操作.

这个问题的策略是什么?

也许新的Stream API应该解决它?

java arraylist removeall

15
推荐指数
2
解决办法
3455
查看次数

覆盖位于ArrayList <String>中的HashMap中的值

假设我有一个带字符串键和整数值的HashMap:

map = {cat=1, kid=3, girl=3, adult=2, human=5, dog=2, boy=2}
Run Code Online (Sandbox Code Playgroud)

我想通过将此信息放入另一个HashMap来切换键和值.我知道HashMap不能有重复的键,因此我尝试将信息放入带有Integer的HashMap中,用于映射到String ArrayList的键,这样我就可以将一个Integer映射到多个字符串:

swap = {1=[cat], 2=[adult, dog, boy], 3=[kid, girl], 5=[human]}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码:

HashMap<Integer, ArrayList<String>> swap = new HashMap<Integer, ArrayList<String>>();

for (String x : map.keySet()) {
        for (int i = 0; i <= 5; i++) {
            ArrayList<String> list = new ArrayList<String>();
            if (i == map.get(x)) {
                list.add(x);
                swap.put(i, list);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的代码唯一的区别是我没有将数字5硬编码到我的索引中; 我有一个方法,在原始的HashMap中找到最高的整数值并使用它.我知道它工作正常,因为我得到相同的输出,即使我在那里硬编码5,我只是没有包括它来节省空间.

我的目标是能够使用任何数据集进行"反转",否则我只能对值进行硬编码.我从上面的代码得到的输出是这样的:

swap = {1=[cat], 2=[boy], 3=[girl], 5=[human]}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我的问题是值ArrayList只保留放入其中的最后一个String,而不是收集所有String.如何使ArrayList存储每个String,而不仅仅是最后一个String?

java arraylist hashmap

15
推荐指数
2
解决办法
1887
查看次数

如何将列表连接到一个列表中

我有一个值列表,其中一些可能是列表/集合或单个值.在JavaScript表示法中,它可能看起来像:

const input = [1,2,[3,4], [5,6], 7];
Run Code Online (Sandbox Code Playgroud)

我想得到:

const concatenated = [1,2,3,4,5,6,7];
Run Code Online (Sandbox Code Playgroud)

所以我有这个Java代码:

      ArrayList<T> concatenated = new ArrayList<>();

      for (T v : input) {
        try{
          concatenated.addAll((Collection) v);
        }
        catch (Exception e1){
          try{
            concatenated.addAll((List) v);
          }
          catch (Exception e2){
            concatenated.add(v);
          }
        }

     }
Run Code Online (Sandbox Code Playgroud)

但那段代码对我来说似乎很糟糕.首先我不知道是否尝试强制转换为List或Collection是否足够 - 是否还有其他类型我应该尝试强制转换?有什么错误我不应该忽略吗?

怎么做对了?

java concatenation arraylist

15
推荐指数
2
解决办法
1044
查看次数