我正在创建一个TableModel,它将具有固定数量的列,但行数将会发生变化(大多数情况下,随着时间的推移而增加).哪种方法可以更好地存储数据,
ArrayList[] columns = new ArrayList[numberOfColumns];
// Each array element is one column. Fill each of them with a new ArrayList.
...
public Object getValueAt(int row, int column) {
return columns[column].get(row);
}
Run Code Online (Sandbox Code Playgroud)
即创建一个ArrayLists 数组,每个数组ArrayList代表一列,或者:
ArrayList<Object[]> rows = new ArrayList<Object[]>();
// Each ArrayList element is one row.
public Object getValueAt(int row, int column) {
return rows.get(row)[column];
}
Run Code Online (Sandbox Code Playgroud)
即创建一个包含数组的ArrayList,每个数组代表一行.
有哪些想法在速度或存储方面更有效?备选方案1要求ArrayList在每个添加的行中扩展N s,而备选方案2要求仅扩展一个,ArrayList但也创建长度为N的新数组(以表示新行).还是有一个明显的,更好的解决方案?
anArrayList只是动态数组的接口吗?或者它们是同一回事吗?
like:ArrayList对应动态数组,HashMap对应Map?
除了我没有看到任何类似动态数组的Java API ,除非它是ArrayList?
在那种情况下,它们将是同一回事!
大概它们是同一回事?
我有以下代码
public static List<Integer> topKFrequent(int[] nums, int k) {
List<Integer> myList = new ArrayList<>();
HashMap<Integer, Integer> map = new HashMap<>();
for (int n : nums) {
if (!map.containsKey(n)) map.put(n, 1);
else map.put(n, map.get(n) + 1);
}
map.entrySet().stream()
.sorted(Map.Entry.<Integer, Integer>comparingByValue().reversed())
.limit(k)
.forEach((key, value) -> myList.add(key));
return myList;
}
Run Code Online (Sandbox Code Playgroud)
将forEach引发错误
Error:(20, 16) java: incompatible types: incompatible parameter types in lambda expression
Run Code Online (Sandbox Code Playgroud)
如何修复/避免此错误?我不太确定如何在这里应用解释问题的答案:Lambda Expression and generic method
编辑:
鉴于答案,更正是将 forEach 中的 lambda 替换为
.forEach((entry) -> myList.add(entry.getKey()));
Run Code Online (Sandbox Code Playgroud) 使用 lombok 进行项目,我有一个 ArrayList。它为空,因为它从未初始化。在决定使用 lombok 删除大量样板代码之前,我最初在构造函数中初始化了它。
让它发挥作用的最简单的例子是什么?
示例:创建构建器后调用刷新会抛出空指针(注意:我省略了构建器中使用的变量,但parameters构建器中没有提及,所以也许我需要用它做一些事情)。
@Builder
public @Data class RMF_Objective {
private ArrayList<String> parameters;
public void refresh(){
parameters.clear(); // Clear for now
}
}
Run Code Online (Sandbox Code Playgroud) 这个问题基本上说明了一切。假设我有一个(排序的)列表,可以包含 1K 到 1M 的任何项目。我有一个starting index和一个ending index。如果我使用该ArrayList.sublist(start, end)方法,时间复杂度是 O(n) 还是 O(1)?我确实在这里检查了答案,因为我认为这是一个常见问题,但是虽然我找到了 LinkedList 的重复答案,但我找不到关于 ArrayList 的具体问题。感谢大家的回答!
我正在尝试使用此功能从文件夹中获取图像列表
var gpath:String = Environment.getExternalStorageDirectory().absolutePath
var spath = "testfolder"
var fullpath = File(gpath + File.separator + spath)
var list = imageReader(fullpath)
fun imageReader(root : File):ArrayList<File>{
val a : ArrayList<File> ? = null
val files = root.listFiles()
for (i in 0..files.size){
if (files[i].name.endsWith(".jpg")){
a?.add(files[i])
}
}
return a!!
}
Run Code Online (Sandbox Code Playgroud)
但我有这些例外:
java.lang.ArrayIndexOutOfBoundsException:length=3;index=3
kotin.kotlinNullPointerException
我读过这个问题,但我不知道如何解决它,
有什么帮助吗?
android arraylist nullpointerexception indexoutofboundsexception kotlin
我有一个包含一些字符串的数组列表:
ArrayList<String> strList = new ArrayList<String>();
strList.addAll(Arrays.asList("interface", "list", "Primitive", "class", "primitive", "List", "Interface", "lIst", "Primitive"));
Run Code Online (Sandbox Code Playgroud)
我写了一个方法来删除数组列表中不区分大小写的字符串:
public static ArrayList<String> removeDuplicates(ArrayList<String> strList) {
for(int i = 0; i < strList.size(); i++) {
for(int j = i + 1; j < strList.size(); j++) {
if(strList.get(i).equalsIgnoreCase(strList.get(j))){
strList.remove(j);
j--;
}
}
}
return strList;
}
Run Code Online (Sandbox Code Playgroud)
输出:
[interface, list, Primitive, class]
Run Code Online (Sandbox Code Playgroud)
但是,我试图仅删除第一次出现的字符串。我正在尝试使其输出等于:
[Interface, lIst, Primitive, class]
Run Code Online (Sandbox Code Playgroud)
这将是数组列表中重复项的最后一次出现
我具体想做什么:
保留的字符串版本与最后一次出现的版本相同。换句话说,最后一次出现的版本保留在第一次出现的位置
如果任何歌曲包含对播放列表中上一首歌曲的引用,则该播放列表被视为重复播放列表。否则,播放列表将以指向空的最后一首歌曲结束。
我需要实现一个函数 isRepeatingPlaylist,如果播放列表重复,则返回 true,否则返回 false。
例如,以下代码打印“true”,因为两首歌曲都指向对方。
Song first = new Song("Hello");
Song second = new Song("Eye of the tiger");
first.setNextSong(second);
second.setNextSong(first);
System.out.println(first.isRepeatingPlaylist());
Run Code Online (Sandbox Code Playgroud)
再说一遍,这不是作业练习,我在做编码挑战,因为当我阅读有关编程概念的理论时,我几乎可以理解,但是当面临编写程序时,我不知道从哪里开始,也不知道如何应用。
public class Song {
private String name;
private Song nextSong;
public Song(String name) {
this.name = name;
}
public void setNextSong(Song nextSong) {
this.nextSong = nextSong;
}
public boolean isRepeatingPlaylist() {
//throw new UnsupportedOperationException("Waiting to be implemented.");
List<String> list = new ArrayList<String>();
list.add(one);
list.add(two);
list.add(three);
list.add(four);
if list.contains()
return true;
else
return false;
}
public static void …Run Code Online (Sandbox Code Playgroud) 菜鸟问题:
我想改变数组列表中存在的值。我最初尝试获取索引项并直接更改其字段值。
const Foo = struct {
const Self = @This();
foo: u8,
};
pub fn main() anyerror!void {
const foo = Foo {
.foo = 1,
};
const allocator = std.heap.page_allocator;
var arr = ArrayList(Foo).init(allocator);
arr.append(foo) catch unreachable;
var a = arr.items[0];
std.debug.warn("a: {}", .{a});
a.foo = 2;
std.debug.warn("a: {}", .{a});
std.debug.warn("arr.items[0]: {}", .{arr.items[0]});
//In order to update the memory in [0] I have to reassign it to a.
//arr.items[0] = a;
}
Run Code Online (Sandbox Code Playgroud)
然而结果却出乎我的意料:
a: Foo{ .foo = 1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试根据用户的输入构建一组可能的 IP 地址。即 IP 地址和 CIDR 号码。我的最终目标是将此列表与单独的地址列表进行比较,并找出丢失的地址。
用户输入示例:192.168.1.0 /24 我想为 /24 网络的所有可能值构建一个数组(即 IP 地址可以是 192.168.1.0 - 192.168.1.255 之间的任何位置)
为了使其工作,我想我必须将 IP 地址转换为二进制,然后找到将成为网络主机部分的位,我在这里完成了:
function ConvertToBinary{
param($ipAddress)
[string]$binaryIP = -join ($ipAddress.Split('.') | ForEach-Object {[System.Convert]::ToString($_,2).PadLeft(8,'0')})
return $binaryIP
}
function FindHost{
param(
[string]$binaryIPAddress,
[int32]$CIDR
)
$hostBits = 32-$CIDR
[string]$myHost = $binaryIPAddress.Substring($binaryIPAddress.Length-$hostBits)
return $myHost
}
$myip = ConvertToBinary "192.168.3.1"
$myHost = FindHost $myip 8
Run Code Online (Sandbox Code Playgroud)
我对如何继续感到有点困惑,所以如果有人可以帮助我或为我指出正确的方向,我将不胜感激