正如我所看到的,列表在数组上的优势非常明显:
List<Integer>, List<? extends Number>, List<? super Integer>.addAll,remove等等.虽然对阵列除了获得/设置所有标准操作必须在过程中的方式通过将它传递给一个静态方法进行.ArrayList,LinkedList不可修改和同步列表,可以隐藏在公共List接口下.作为缺点,我只能提到没有语法糖和运行时类型检查.同时支持两种结构需要频繁使用asList和toArray方法,这使得代码不易读取.所以我很好奇使用我想念的数组有什么重要的好处.
我有一个方法,我试图进行单元测试.此方法将参数作为ArrayList并使用它执行操作.我试图定义的模拟是:
ArrayList<String> mocked = mock(ArrayList.class);
Run Code Online (Sandbox Code Playgroud)
这给出了[未经检查]未经检查的转换"警告.
ArrayList<String> mocked = mock(ArrayList<String>.class);
Run Code Online (Sandbox Code Playgroud)
给了我一个错误.
任何人都想关心我做错了什么?
我有一些对象
class A {
private Long id;
private String name;
public boolean equals(Long v) {
return this.id.equals(v);
}
}
Run Code Online (Sandbox Code Playgroud)
和这些对象的ArrayList.我想要的是能够检查该列表是否包含一个按对象的字段的对象.例如:
ArrayList<A> list = new ArrayList<A>(); if (list.contains(0L)) {...}
Run Code Online (Sandbox Code Playgroud)
但是压倒的Equals方法对我没有帮助.我做错了什么?谢谢
更新 我应该覆盖hashcode()方法吗?
我有随机String投入的ArrayList.
private ArrayList<String> teamsName = new ArrayList<String>();
String[] helper;
Run Code Online (Sandbox Code Playgroud)
例如:
teamsName.add(helper[0]) where helper[0] = "dragon";
teamsName.add(helper[1]) where helper[1] = "zebra";
teamsName.add(helper[2]) where helper[2] = "tigers" // and so forth up to about 150 strings.
Run Code Online (Sandbox Code Playgroud)
鉴于您无法控制输入(即进入ArrayList的字符串是随机的;斑马或任何顺序的龙),一旦ArrayList填充了输入,我如何按字母顺序排序,排除第一个?
teamsName[0]很好; 排序teamsName[1 to teamsName.size]按字母顺序排列.
我有以下java代码,我试图将ArrayList复制到另一个ArrayList.
ArrayList<String> nodes = new ArrayList<String>();
ArrayList NodeList=new ArrayList();
ArrayList list=new ArrayList();
for(int i=0;i<PropertyNode.getLength()-1;i++){
Node childNode = PropertyNode.item(i);
NodeList Children = childNode.getChildNodes();
if(Children!=null){
nodes.clear();
nodes.add("PropertyStart");
nodes.add(Children.item(3).getTextContent());
nodes.add(Children.item(7).getTextContent());
nodes.add(Children.item(9).getTextContent());
nodes.add(Children.item(11).getTextContent());
nodes.add(Children.item(13).getTextContent());
nodes.add("PropertyEnd");
}
NodeList.addAll(nodes);
list.add(NodeList);
}
Run Code Online (Sandbox Code Playgroud)
我希望"list"数组采用以下格式:
[[PropertyStart,a,b,c,PropertyEnd],[PropertyStart,d,e,f,PropertyEnd],[PropertyStart,......]]
Run Code Online (Sandbox Code Playgroud)
但是从上面的代码中,"list"数组输出如下所示:
[PropertyStart,a,b,c,PropertyEnd,PropertyStart,d,e,f,PropertyEnd,PropertyStart,....PropertyEnd]
Run Code Online (Sandbox Code Playgroud)
我想你可能已经注意到了这种差异.我无法达到预期格式的结果.请建议我任何解决方案!提前致谢!!
在这个例子中:
import java.util.*;
public class Example {
static void doesntCompile(Map<Integer, List<? extends Number>> map) {}
static <T extends Number> void compiles(Map<Integer, List<T>> map) {}
static void function(List<? extends Number> outer)
{
doesntCompile(new HashMap<Integer, List<Integer>>());
compiles(new HashMap<Integer, List<Integer>>());
}
}
Run Code Online (Sandbox Code Playgroud)
doesntCompile() 无法编译:
Example.java:9: error: incompatible types: HashMap<Integer,List<Integer>> cannot be converted to Map<Integer,List<? extends Number>>
doesntCompile(new HashMap<Integer, List<Integer>>());
^
Run Code Online (Sandbox Code Playgroud)
whilecompiles()被编译器接受。
这个答案解释了唯一的区别是不同<? ...>,<T ...>让您稍后引用类型,这似乎并非如此。
是什么区别<? extends Number>,并<T extends Number>在这种情况下,为什么不第一编译?
以前我总是认为当长度未知时,Vector可用于非描述对象.据我所知,我认为它也是线程安全的
什么是Vector不应该再使用的改变,替代方案是什么?
好的,所以这是我的ArrayList:
private List<ClientThread> clients = new ArrayList<ClientThread>();
Run Code Online (Sandbox Code Playgroud)
这就是我想要做的事情:
我正在尝试删除ArrayList上面发布的最后一个已知项目.我正在尝试使用以下代码执行此操作:
} catch(SocketException re) {
String hey = clients.get(clients.size());
ClientThread.remove(hey);
System.out.println(hey + " has logged out.");
System.out.println("CONNECTED PLAYERS: " + clients.size());
}
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误:
C:\wamp\www\mystikrpg\Server.java:147: incompatible types
found : Server.ClientThread
required: java.lang.String
String hey = clients.get(clients.size());
^
C:\wamp\www\mystikrpg\Server.java:148: cannot find symbol
symbol : method remove(java.lang.String)
location: class Server.ClientThread
ClientThread.remove(hey);
^
2 errors
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?它应该删除我的最后一个已知项目ArrayList.
我想得到我的PagerAdapter的可见视图的当前位置
我没有看到一个明显的功能getPosition(),我想要一个.
我想在那个位置向它的arraylist添加一个对象,但我需要先知道它
我必须创建一个方法,根据电子邮件按字母顺序对对象的ArrayList进行排序,然后打印排序的数组.我在排序它时遇到麻烦的部分.我已经研究过它并尝试使用,Collections.sort(vehiclearray);但这对我没用.我是因为我需要一种称为比较器的东西,但无法弄清楚它是如何工作的.我是否必须使用这些或者可以像冒泡排序或插入排序工作这样的东西?
这是我到目前为止的代码:
public static void printallsort(ArrayList<vehicle> vehiclearray){
ArrayList<vehicle> vehiclearraysort = new ArrayList<vehicle>();
vehiclearraysort.addAll(vehiclearray);
//Sort
for(int i = 0; i < vehiclearraysort.size(); i++)
if ( vehiclearray.get(i).getEmail() > vehiclearray.get(i+1).getEmail())
//Printing
for(i = 0; i < vehiclearraysort.size(); i++)
System.out.println( vehiclearraysort.get(i).toString() + "\n");
}
Run Code Online (Sandbox Code Playgroud)