我正在使用Java ArrayList
创建数组列表,并使用java.util.ArrayList
中提供的方法对其进行编辑。我们的老师让我们做各种事情,比如删除列表中的整数并将它们放在别处。
我们的问题集的最后一步是获取在整个类中编辑过的数组,将其复制到一个新数组(我的新数组的变量是newArrayList
),取出所有偶数整数复制新列表的数组列表,然后打印出旧的一个没有偶数整数,新的复制从旧的复制与偶数整数并排。
偶数为整数的旧列表为removed = pics
从旧列表中复制的新列表没有偶数为removed = newpics
我为ArrayList
的大小运行了一个for循环,其中包含一个嵌套的if语句,用于标识偶数变量。在打印出来的结果中,newpics
似乎与pics
一起失去了偶数整数,当我最后将它们打印出来时,它们甚至都缺失整数。我只希望pics
甚至缺少整数,并且newpics
似乎在for循环的某处被改变了,即使我甚至没有在for循环中提到它。我有多个人看这个,这是非常令人沮丧的。
这是我的代码:
import java.util.ArrayList;
/**
* Write a description of class ArrayList here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class ArrayListTester
{
/**
* An example of a method - replace this comment with your own
*
* @param y a sample parameter for a method
* @return the sum of x and y
*/
public static void main (String[]args)
{
ArrayList <Integer> pics = new ArrayList <Integer>();
for (int i=0; i<6;i++)
{
pics.add(i);
}
System.out.println("Original ArrayList" +pics);
System.out.println("__________________________________");
int secondlasttoFirst = pics.get(4);
pics.remove(4);
pics.add(0,secondlasttoFirst);
System.out.println("Penultimate moved to front" +pics);
System.out.println("__________________________________");
int firsttoLast = pics.get(0);
pics.remove(0);
pics.add(5, firsttoLast);
System.out.println("First moved to end" +pics);
System.out.println("__________________________________");
int fronttoBack = pics.get(0);
int backtoFront = pics.get(5);
pics.remove(0);
pics.add(0, backtoFront);
pics.remove(5);
pics.add(5, fronttoBack);
System.out.println("Swapped first and last" +pics);
System.out.println("__________________________________");
ArrayList <Integer> newpics = new ArrayList <Integer>();
newpics = pics;
System.out.println("newArrayList" +newpics);
System.out.println("__________________________________");
int j=0;
for (j=0; j<pics.size();j++)
{
if (pics.get(j) % 2 ==0)
{
pics.remove(j);
}
}
System.out.println("Original with evens removed" +pics);
System.out.println("__________________________________");
System.out.println("Original newArrayList" +newpics);
}
}
答案 0 :(得分:1)
当你说 $host = "localhost";
$sql_username = "root";
$sql_password = "password";
$sql_db = "tryckstore";
$con = mysqli_connect($host, $sql_username, $sql_password,$sql_db) or die("Error");
if (!mysqli_select_db($con, "tryckstore")) {
die("Error selecting databse.");
} else {
echo "ok";
}
时,你只需创建一个指向同一实际内容的新变量。也许你应该考虑制作一个......克隆?
http://www.java2s.com/Tutorial/Java/0140__Collections/CopyingandCloningListspublicObjectclone.htm
答案 1 :(得分:0)
在java中,当你说something = somethingelse
时,你实际上存储了对该对象的引用。也就是说,something
将具有与其他内容相同的地址。因此,改变是相同的。
查看这个更简单的示例:
<强>代码:强>
public static void main(String[] args) {
// Make an array
ArrayList<String> strings = new ArrayList<>();
// And a copy to it...
// This is just copy of the address
ArrayList<String> copy = strings;
// Add to strings
strings.add("Hi");
// Add to copy
copy.add("my");
// Add to strings
strings.add("name");
// Add to copy
copy.add("is");
// Add to strings
strings.add("bob");
// No matter which one you print, youll get the same string because they are referncing the same thing
System.out.println(copy);
// > [Hi, my, name, is, bob]
System.out.println(strings);
// > [Hi, my, name, is, bob]
}
请注意我是如何交替添加内容的,但两者都以相同的结果结束。
以下是如何进行实际复制的方法:
<强>代码强>
public static void main(String[] args) {
// Make an array
ArrayList<String> strings = new ArrayList<>();
// Add to strings
strings.add("Hi");
// Add to strings
strings.add("name");
// Add to strings
strings.add("bob");
// Now you want a copy
ArrayList<String> copy = new ArrayList<>(strings);
// now changes to copy, are only to copy
copy.add("change just to copy");
System.out.println(strings);
// > [Hi, name, bob]
System.out.println(copy);
// > [Hi, name, bob, change just to copy]
}
答案 2 :(得分:0)
您实际上确实在循环中提到了其他列表,因为newpics = pics
...您制作了newpics
参考 pics
。换句话说,它们是同一个对象,因此对一个对象的更改会反映在另一个对象中。
如果您不希望发生这种情况,只需更改
即可ArrayList <Integer> newpics = new ArrayList <Integer>();
newpics = pics;
到此
ArrayList <Integer> newpics = new ArrayList <Integer>(pics);
此外,在迭代它时调用list.remove()
检查其大小可能会导致一些副作用,如跳过元素。你可以通过使用迭代器来解决这个问题。
Iterator<Integer> iter = pics.iterator();
while(iter.hasNext())
{
int pic = iter.next();
if (pic % 2 ==0)
{
iter.remove();
}
}