我一直只是一个人使用:
List<String> names = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
我使用接口作为可移植性的类型名称,因此当我问这些问题时,我可以重新编写代码.
何时应该LinkedList使用,ArrayList反之亦然?
我已经看过几次提到这个,我不清楚这是什么意思.你何时以及为何会这样做?
我知道接口有什么作用,但事实上我不清楚这一点让我觉得我错过了正确使用它们.
如果你这样做是这样的:
IInterface classRef = new ObjectWhatever()
Run Code Online (Sandbox Code Playgroud)
你可以使用任何实现的类IInterface吗?你什么时候需要这样做?我唯一能想到的是,如果你有一个方法,你不确定除了实现之外将传递什么对象IInterface.我想不出你需要多久做一次.
另外,你怎么能写一个接受实现接口的对象的方法?那可能吗?
我必须在内存中保留数千个字符串,以便在Java中以串行方式访问.我应该将它们存储在数组中还是应该使用某种List?
由于数组将所有数据保存在连续的内存块中(与Lists不同),使用数组存储数千个字符串会导致问题吗?
我最近在办公室的android项目中使用了ArrayList,我在List和ArrayList之间有点混淆,两者的区别是什么,我应该使用什么?
我也看到了它的一些实现.
List<SomeObject> myList = new ArrayList<SomeObject>();
ArrayList<SomeObject> myList = new ArrayList<SomeObject>();
Run Code Online (Sandbox Code Playgroud)
这两个实例有什么区别?
如何获取ArrayListJava中的数组切片?具体来说,我想做这样的事情:
ArrayList<Integer> inputA = input.subList(0, input.size()/2);
// where 'input' is a prepouplated ArrayList<Integer>
Run Code Online (Sandbox Code Playgroud)
所以我希望这可以工作,但Java返回List- 所以它是不兼容的.当我试图施展它时,Java不会让我.我需要ArrayList- 我该怎么办?
这两个声明有什么区别?
声明1:
ArrayList<String> arrayList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
宣言2:
List<String> arrayList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud) 我想知道如何更改listView上所选项目的背景颜色.我只想更改用户点击的特定项目,这意味着如果用户点击另一个项目,它将是突出显示的项目.好吧,因为我希望它尽可能保持简单并使用默认的android listview我使用此代码:
record_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
try{
for (int ctr=0;ctr<=record_items.length;ctr++){
if(i==ctr){
record_list.getChildAt(ctr).setBackgroundColor(Color.CYAN);
}else{
record_list.getChildAt(ctr).setBackgroundColor(Color.WHITE);
}
}
}
catch (Exception e){
e.printStackTrace();
}
Log.v("Selected item",record_list.getItemAtPosition(i));
}
});
Run Code Online (Sandbox Code Playgroud)
好的,这个工作正常,但问题是它很慢.现在我想知道是否有任何其他方法可以做到,它将提供与我相同的输出.
我尝试使用record_list.getSelectedView().setBackgroundColor(Color.CYAN);但它给了我一个空指针异常.
我也尝试了selector.xml,但它也没有做到这一点.此外,ListView上有一个名为listSelector的属性.如文档"Drawable用于指示列表中当前选定的项目"所述,它是可绘制的.我也相信这应该可以做到这一点,是的,它可以在我的模拟器上完成,但不是在我的Galaxy选项卡上.我也尝试了其他方法,但没有任何方法可行,因为我想要它.
假设我有一个名为的类Class,
我想创建一个新的ArrayList,它的值将是类型Class.
我的问题是:我该怎么做?
我无法从Java Api中理解.
我试过这个:
ArrayList<Class> myArray= new ArrayList ArrayList<Class>;
Run Code Online (Sandbox Code Playgroud) 在我正确掌握接口最佳实践的过程中,我注意到了以下声明:
List<String> myList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
代替
ArrayList<String> myList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
- 要我的理解,是因为它可以让有一天你不希望实现一个ArrayList但也许另一种类型列表的情况下的灵活性.
有了这个逻辑,我建立了一个例子:
public class InterfaceTest {
public static void main(String[] args) {
PetInterface p = new Cat();
p.talk();
}
}
interface PetInterface {
public void talk();
}
class Dog implements PetInterface {
@Override
public void talk() {
System.out.println("Bark!");
}
}
class Cat implements PetInterface {
@Override
public void talk() {
System.out.println("Meow!");
}
public void batheSelf() {
System.out.println("Cat bathing");
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我无法访问batheSelf()方法,因为它仅适用于Cat.这使我相信,我应该只从接口中声明,如果我只打算使用的接口(而不是从子类中额外的方法)声明的方法,否则我应该直接从类(在这种情况下,猫)申报.我在这个假设中是否正确?
java ×8
arraylist ×4
android ×2
interface ×2
list ×2
oop ×2
arrays ×1
collections ×1
linked-list ×1
performance ×1