#java #arrays #vector
#java #массивы #векторный
Вопрос:
Итак, я пытался просмотреть все, но, похоже, не могу найти много информации о том, что именно нужно изменить, чтобы преобразовать массив в векторный. Или, скорее, я полагаю, я просто не знаю, что именно искать.
Массив — это:
public class Member{
private int id;
private String name;
private String[] books = new String[5];
//replace the String books array with a Vector variable named books
//that functions exactly the same way
public Member() {
id = 0;
name = "John Doe";
}
public Member(int pId, String pName) {
id = pId;
name = pName;
}
public int getId(){
return id;
}
public void setId(int pId){
id=pId;
}
public String getName(){
return name;
}
public void setName(String pName){
name=pName;
}
public String[] getBooks(){
return books;
}
public void setBooks(String[] pBooks){
books=pBooks;
}
public String toString(){
StringBuffer buf = new StringBuffer();
buf.append("ID: " getId() " Member: " getName() "n");
for(int x=0; x<books.length; x ) {
buf.append("Book: " books[x] "n");
}
return buf.toString();
}
/**
* @param args
*/
public static void main(String[] args) {
String[] list = {"Java Data Structures", "The Bible", "Grapes of Wrath",
"Goldfinger", "Sam I Am", "The Cat in the Hat", "Shawshenk Redemption",
"Green Eggs and Ham", "Linus and Lucy", "Abraham Lincoln"};
Member m1 = new Member();
m1.setId(431);
m1.setName("William Wallace");
for(int i=0; i<5; i ) {
m1.books[i] = list[i];
}
Member m2 = new Member(7010, "Bonny Clyde");
for(int i=5; i<list.length; i ) {
int x = i-5;
m2.books[x] = list[i];
}
System.out.println(m1.toString());
System.out.println();
System.out.println(m2.toString());
}
}
Сейчас я пытаюсь преобразовать его, но, честно говоря, я не знаю, что я делаю.
import java.util.Vector;
public class Member{
private int id;
private String name;
private Vector<String> books = new Vector<String>(5);
//replace the String books array with a Vector variable named books
//that functions exactly the same way
public Member() {
id = 0;
name = "John Doe";
}
public Member(int pId, String pName) {
id = pId;
name = pName;
}
public int getId(){
return id;
}
public void setId(int pId){
id=pId;
}
public String getName(){
return name;
}
public void setName(String pName){
name=pName;
}
public String getBooks(){
return books;
}
public void setBooks(String pBooks){
books=pBooks;
}
public String toString(){
StringBuffer buf = new StringBuffer();
buf.append("ID: " getId() " Member: " getName() "n");
for(int x=0; x<books.length; x ) {
buf.append("Book: " books<x> "n");
}
return buf.toString();
}
/**
* @param args
*/
public static void main(String args) {
String list = {"Java Data Structures", "The Bible", "Grapes of Wrath",
"Goldfinger", "Sam I Am", "The Cat in the Hat", "Shawshenk Redemption",
"Green Eggs and Ham", "Linus and Lucy", "Abraham Lincoln"};
Member m1 = new Member();
m1.setId(431);
m1.setName("William Wallace");
for(int i=0; i<5; i ) {
m1.books<i> = list<i>;
}
Member m2 = new Member(7010, "Bonny Clyde");
for(int i=5; i<list.length; i ) {
int x = i-5;
m2.books<x> = list<i>;
}
System.out.println(m1.toString());
System.out.println();
System.out.println(m2.toString());
}
}
Любая помощь была бы высоко оценена.
Комментарии:
1. Vector действительно устарел. Я предлагаю вместо этого использовать ArrayList. В любом случае, у вас, очевидно, много ошибок компиляции. Вы читали руководство по использованию коллекций? Вы пробовали просматривать каждую из своих ошибок компиляции?
Ответ №1:
Вы можете упаковать свой массив в вектор таким образом:
Vector<String> v = new Vector<String>(Arrays.asList(myList))
и тогда ваш цикл становится
for (String s : v) {
...
}
Я бы использовал ArrayList
over Vector
, если только у вас нет веских причин для использования Vector
.
Комментарии:
1. Хороший ответ, но я бы просто использовал Arrays.asList(somearray) напрямую. Обычно обертывание его с помощью arraylist не дает вам многого. Единственная по-настоящему интересная вещь заключается в том, что arraylist может быть изменен, а список из asList () — нет (потому что он поддерживается самим массивом).
2. @Джефф, я согласен, что простая оболочка — это правильный путь, если вы согласны возвращать неизменяемый список. Я заключил это в
Vector
, потому что это был первоначальный вопрос. Кроме того, преобразование массива вArrayList
илиVector
может помочь двумя способами: защитное копирование, клиенты могут изменять его, не путаясь в исходном массиве; и поддержка мутации, в частностиremove()
иadd()
.
Ответ №2:
Вот ваш пример использования вектора. Я бы настоятельно рекомендовал использовать класс ArrayList, хотя, поскольку Vector больше не используется.
import java.util.Vector;
public class Member{
private int id;
private String name;
private Vector<String> books = new Vector<String>();
//replace the String books array with a Vector variable named books
//that functions exactly the same way
public Member() {
id = 0;
name = "John Doe";
}
public Member(int pId, String pName) {
id = pId;
name = pName;
}
public int getId(){
return id;
}
public void setId(int pId){
id=pId;
}
public String getName(){
return name;
}
public void setName(String pName){
name=pName;
}
public Vector<String> getBooks(){
return books;
}
public void add(String book) {
books.add(book);
}
public void setBooks(Vector<String> pBooks){
books=pBooks;
}
public String toString(){
StringBuffer buf = new StringBuffer();
buf.append("ID: " getId() " Member: " getName() "n");
for(int x=0; x<books.size(); x ) {
buf.append("Book: " books.get(x) "n");
}
return buf.toString();
}
/**
* @param args
*/
public static void main(String[] args) {
String[] list = new String[]{"Java Data Structures", "The Bible", "Grapes of Wrath",
"Goldfinger", "Sam I Am", "The Cat in the Hat", "Shawshenk Redemption",
"Green Eggs and Ham", "Linus and Lucy", "Abraham Lincoln"};
Member m1 = new Member();
m1.setId(431);
m1.setName("William Wallace");
for(int i=0; i<5; i ) {
m1.add(list[i]);
}
Member m2 = new Member(7010, "Bonny Clyde");
for(int i=5; i<list.length; i ) {
int x = i-5;
m2.add(list[x]);
}
System.out.println(m1.toString());
System.out.println();
System.out.println(m2.toString());
}
}
Комментарии:
1. Вам следует избавиться от венгерской нотации, к которой в Java относятся неодобрительно. Также вы могли бы рассмотреть возможность изменения типа get / setBooks на
List
вместоVector
. Всегда лучше программировать для интерфейса, чем для конкретного класса.2. Я согласен с обоими пунктами. Однако я не хотел переписывать его код, кроме как для решения вопроса, который он задавал.
3. Я должен также отметить, что, исходя из характера его вопроса, он явно новичок в Java, и я не хотел еще больше запутывать дело, поэтому я предложил использовать ArrayList и не вдаваться в предложения по программированию интерфейсов.
Ответ №3:
Вы можете использовать Arrays.asList
для преобразования массива в список. Вектор — это список, но я подозреваю, что все, что вам нужно, это список. Хорошей идеей является программирование в интерфейсе List, а не в конкретном классе, таком как Vector.
List<String> list = Arrays.asList(array)
Ответ №4:
Алекс, если вашему коду не обязательно быть безопасным в многопоточной среде, как все предлагали, вам следует использовать ArrayList.
В случае, если у вас есть параллельные операции, вы можете захотеть взглянуть на Collections.synchronizedList
. Однако проверьте некоторые ограничения использования этого, как указано здесь
Наконец, есть некоторые ситуации, когда вектор необходим. Там я бы рекомендовал Vector<String> v = new Vector<String>(Arrays.asList(myList))
то, что было предложено Майком ранее.