가능한 중복 : 내가 사용할 수있는 좋은 범용 표 기반 구조가 있다면
Table like java data structure일반 목적의 테이블 구조 (같은 ResultSet의)
는 아는 사람 있나요 데이터 조작? ResultSet은 인터페이스이므로 데이터베이스없이 비슷한 기능을 원한다면 완전히 구현해야 할 필요가 없습니다. 아파치 코먼 컬렉션은 즉시 적합한 것은없는 것 같습니다.
가능한 중복 : 내가 사용할 수있는 좋은 범용 표 기반 구조가 있다면
Table like java data structure일반 목적의 테이블 구조 (같은 ResultSet의)
는 아는 사람 있나요 데이터 조작? ResultSet은 인터페이스이므로 데이터베이스없이 비슷한 기능을 원한다면 완전히 구현해야 할 필요가 없습니다. 아파치 코먼 컬렉션은 즉시 적합한 것은없는 것 같습니다.
일반적으로은 Javabeans의 List
또는 Set
을 사용합니다. 각 Javabean은 데이터베이스의 행과 같이 하나의 실제 엔티티를 나타냅니다.
public class User {
private Long id;
private String name;
private Integer age;
// Add/generate getters+setters.
}
List
인덱스에 의해 빠른 접근 방법을 제공한다
List<User> users = new ArrayList<User>();
users.add(new User(1L, "foo", 30));
users.add(new User(2L, "bar", 20));
//...
와 예를 들어
User
.
속성 (열)의 양이 정해지지 않은 경우 키가 속성 (열) 이름을 나타내는 대신 Map<String, Object>
을 사용하는 것이 좋습니다.
List<Map<String, Object>> table = new ArrayList<Map<String, Object>>();
Map<String, Object> row = new HashMap<String, Object>();
row.put("id", 1L);
row.put("name", "foo");
row.put("age", 30);
table.add(row);
// ...
단순한 Javabean보다 약간의 오버 헤드가 추가됩니다. 그 이유는 이러한 문자열 키가 힙에도 저장되어야하기 때문입니다.
열 이름을 신경 쓰지 않는다면 List<List<Object>>
또는 덜 유연한 Object[][]
으로 넘어갈 수도 있습니다. 두 가지 모두를 사용하면 x
및 y
까지 요소에 쉽게 액세스 할 수 있습니다.
아마도 DefaultTableModel
과 같은 것이 귀하의 요구 사항을 충족시킬 것입니다. 이것은 일반적으로 데이터를 표시하기 위해 JTable과 함께 사용되지만 단독으로 사용할 수도 있습니다.
RowTableModel
에 기반한 BeanTableModel
에는 데이터 행에 더 쉽게 액세스 할 수있는 몇 가지 동적 기능이 있습니다.
인 메모리 데이터베이스 (예 : HSQLDB 또는 H2)을 사용하지 않는 이유는 무엇입니까? 그들은 매우 가볍고 빠름이며 원하는 것처럼 보이는 JDBC 인터페이스를 제공하고 언급 한 JOIN 기능을 제공합니다.
Java 6에는 CachedRowSet
인터페이스가 있으며 Sun 클래스 인 CachedRowSetImpl
이 있습니다. 이것은 아마도 당신이 찾고있는 것 중에서 가장 가까운 것입니다. ResultSet
으로 채워지도록 설계되었습니다.
그게 맞는다면 그것은 아마도 당신이 찾고있는 것일 것입니다.
그렇지 않은 경우 올바르게 채우는 데 문제가있을 수 있습니다.
Google Guava 라이브러리는 몇 가지 일반적인 용도 (HashBasedTable, TreeBasedTable)를 제공합니다. 클래스는 일반 클래스이므로 모든 클래스가 행/열 키 역할을 할 수 있습니다.워드 프로세서에서
예 :
Table<Vertex, Vertex, Double> weightedGraph = HashBasedTable.create();
weightedGraph.put(v1, v2, 4.0);
weightedGraph.put(v1, v3, 20.0);
weightedGraph.put(v2, v3, 5.0);
weightedGraph.row(v1); // returns a Map mapping v2 to 4, v3 to 20
weightedGraph.column(v3); // returns a Map mapping v1 to 20, v2 to 5
어떤 작업 당신은 당신의 테이블을 가질 필요합니까? 너는 그걸로 무엇을 할거니? 만약 당신이 아무런 도움이 필요 없다면 BalusC의 콩이 당신에게 맞는 것 같습니다. – Justin
에는 최소한의 이름이 지정된 열 머리글이 있어야합니다. 어쩌면 로직을 결합 할 수도 있습니다. 하루 종일 작업 할 때 테이블 지향 처리가 가능하지만 작업을 데이터베이스에로드하고 작업을 실행하는 것은 과도합니다. 현재 일부 List