是否有可能找出某个列表是否固定大小?我的意思是,例如这段代码:
String[] arr = {"a", "b"};
List<String> list = Arrays.asList(array);
Run Code Online (Sandbox Code Playgroud)
返回List由数组支持的固定大小.但是,如果List是固定大小而不尝试添加/删除元素并捕获异常,是否有可能以编程方式理解?例如:
try {
list.add("c");
}
catch(UnsupportedOperationException e) {
// Fixed-size?
}
Run Code Online (Sandbox Code Playgroud) 通常,Java可以被视为类型安全的语言.我知道泛型有一些缺陷,但我最近遇到了一个前所未有的问题.要打破它:
Object[] objects = new Integer[10];
objects[0] = "Hello World";
Run Code Online (Sandbox Code Playgroud)
不会导致预期的编译时错误.我会假设一个数组的声明Object将不允许指向一个其他的数组.在泛型中,我不允许做出如下奇怪的事情:
ArrayList<Object> objs = new ArrayList<Integer>
Run Code Online (Sandbox Code Playgroud)
如果我试图欺骗Java做一些事情
ArrayList<? extends Object> objects = new ArrayList<Integer>
Run Code Online (Sandbox Code Playgroud)
我被允许声明它,但我只能添加类型的对象null.
为什么Java不会阻止声明这样的weired数组呢?
在Java中拥有一个具有List的所有功能但具有最大存储容量的数据结构对我来说很有用,并且在添加新数据时丢弃旧数据.可以想象,在某些时候,我可能想要实现一个固定大小的队列,它保持数据的更一般顺序,并在该顺序中丢弃最旧的数据,但这是未来的.
目前我正在实现它:
public class FixedSizeList<T> {
private final int maxSize;
private final LinkedList<T> list = new LinkedList<T>();
public FixedSizeQueue(int maxSize) {
this.maxSize = maxSize < 0 ? 0 : maxSize;
}
public T add(T t) {
list.add(t);
return list.size() > maxSize ? list.remove() : null;
}
// add remaining methods...
}
Run Code Online (Sandbox Code Playgroud)
是否存在(a)满足我需求的现有数据结构,或者(b)实现此数据结构的更好方法?
我有这个:
private ArrayList<ArrayList<Object>> models;
Run Code Online (Sandbox Code Playgroud)
在构造函数中我有:
models = new ArrayList<ArrayList<Object>>();
Run Code Online (Sandbox Code Playgroud)
后来,我做这样的事情:
models.add(new ArrayList<Object>());
Run Code Online (Sandbox Code Playgroud)
以及其他操作。
我想将外部 ArrayList 设为具有固定大小(数组、列表)的内容,但由于嵌套对象,我真的不知道如何编写声明、初始化、添加等。有人可以通过为我回答这个问题来节省我的时间吗?
有没有办法在Java Collections中为TreeSet提供大小限制,就像我们对数组一样?例如,在我们做的数组中,
anArray = new int[10];
Run Code Online (Sandbox Code Playgroud) 我想指定我的JList的固定宽度
我按照吉尔伯特勒布朗克22k提供的例子
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
Panel panel = new JPanel();
panel.setBackground(Color.WHITE);
getContentPane().add(panel);
String [] queries = {"a", "b", "a", "b" , "a", "b", "a", "b"};
panel.setLayout(new BorderLayout());
JList list = new JList(queries);
list.setMaximumSize(new Dimension(200, 200)); // this line does not do the job
list.setMinimumSize (new Dimension (200,200));
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setVisibleRowCount(5);
JScrollPane scrollPane_1 = new JScrollPane(list);
panel.add(scrollPane_1 , BorderLayout.CENTER);
Run Code Online (Sandbox Code Playgroud)
但这并没有强制规模200 200.我需要宽度为JScrollPane200
java ×7
arrays ×3
arraylist ×1
declaration ×1
jlist ×1
linked-list ×1
list ×1
swing ×1
type-safety ×1