我正在尝试创建一个ArrayList,它将有3列类型(日期,日期,字符串)
所以它真的像多个值的表,例如:
Jan 11, Jan 11, "started"
Jan 11, Jan 15, "running"
...
Jan 20, Jan 23, "slowing"
Jan 23, Jan 23, "stopped"
我将如何创建像这样的ArrayList?或者还有其他更好的数据格式吗?对不起,我是Java的新手并且正在努力学习。此外,我需要能够在不同的类之间传递这种数据结构。
非常感谢!
答案 0 :(得分:2)
创建持有者类:
class Holder{
//your fields : Date, Date, String
}
然后:
ArrayList<Holder> list = new ArrayList<Holder>();
答案 1 :(得分:2)
在ArrayList中,您不能有多个列,ArrayList
类似于一维数组,您可以存储任何数据类型的对象。
解决方案取决于您尝试解决的问题。
如果您尝试存储在一行中的数据是相关的并且具有一些唯一标识,则可以使用HashMap,
或者您可以创建一个以列为字段的类,并将该类的实例存储在ArrayList
中。
希望这有帮助。
答案 2 :(得分:1)
创建一个具有属性的类,然后使用类类型声明一个列表,如:
public class MyClass {
private Date d1;
private Date d2;
private String s;
}
然后将列表声明为:
ArrayList<MyClass> list = new ArrayList<MyClass>();
答案 3 :(得分:1)
public class MyObject() {
Date date1;
Date date2;
String status;
public MyObject() {
}
//Getters & Setters
}
然后在main中,或者您引用此数据的地方
List< MyObject> list = new ArrayList<>();
答案 4 :(得分:1)
Java没有用于保存不同类型的数据结构。但是,我创建了适合您的 Tuple 数据结构。
样本用法:
public class TupleTest {
@Test
public void testOneType() {
Tuple t1 = Tuple.Factory.create(1);
Tuple t2 = Tuple.Factory.create(1);
assertEquals(t1, t2);
}
@Test
public void testTwoTypes() {
Tuple t1 = Tuple.Factory.create(1, "a");
Tuple t2 = Tuple.Factory.create(1, "a");
assertTrue(t1.equals(t2));
}
@Test
public void testGetIndex() {
Tuple t1 = Tuple.Factory.create(1, "a");
assertTrue((Integer) t1.get(0) == 1);
}
}
public class Tuple {
private final Object[] items;
private Tuple(Object... items) {
this.items = items;
}
public static class Factory {
public static Tuple create(final Object... items) {
return new Tuple(items);
}
}
/**
*
* @return
*/
public synchronized int size() {
return items.length;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
int hash = 17;
for (Object obj : items) {
if (obj != null)
hash = hash * 31 + obj.hashCode();
}
return hash;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
boolean res = true;
final int size = this.size();
final Tuple p = (Tuple) obj;
if (!(obj instanceof Tuple))
res = false;
if (obj == null || this == obj)
res = false;
if (p.size() != size)
res = false;
for (int i = 0; i < size; i++) {
if (!p.items[i].getClass().equals(this.items[i].getClass()))
res = false;
if (!p.items[i].equals(this.items[i]))
res = false;
}
return res;
}
/**
* Return string of multiple types "String.class Number.Class Integer.Class"
*/
@Override
public String toString() {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
for (Object item : items) {
sb.append(item.toString() + " ");
}
return sb.toString();
}
public Object get(int index) {
return items[index];
}
}
答案 5 :(得分:0)
public class MyObject {
Date d1;
Date d2;
String s;
}
List<MyObject> list = new ArrayList<MyObject>();
答案 6 :(得分:0)
你可以使用HashMap是最好的方法
如何使用HashMap,(这个例子是@Stephen C)
The value in the HashMap, to find values are sought by means of the associated key.
The Hashmap provide quick search
声明的例子
//1
HashMap<String, Integer> hashMap = new HashMap<String, Integer>();
//2
HashMap<String, ArrayList<String>> hashMap2= new HashMap<String, ArrayList<String>>()
把
//1
hashMap.put("Value1", new Integer(1));
//2
ArrayList<String> arrList = new ArrayList<String>();
arrList .add("value");
hashMap2.put("value1", arrList );
获取
//1
hashMap.containsValue(1));
//2
while(hashMap2.hasNext()) {
System.out.println("Key = '" + key + "' has values: " + values);
}
我希望这些例子可以为许多不理解为“Stephen C”的人提供解决方案。
答案 7 :(得分:0)
正如其他人已经解释的那样,在Java中这样做的惯用方法是为你的三元组创建一个类。
我想添加其他内容,这就是为您的实际数据建模。而不是将它们称为d1,d2和s - 将字段命名为实际的字段。
我不知道你的日期代表什么,但这是我的意思的一个例子:
class Record {
Date begin, end;
String status;
}
List<Record> records;