集合之list接口
LIst接口子类的特点:
有序, 可重复
该接口所特有的方法:
增加
void add(int index, E element)
boolean addAll(int index, Collection<? extends E> c)
List<String> li=new ArrayList<>();
li.add("as");
li.add("xz");
li.add("qw");
System.out.println(li);
List<String> li3=new ArrayList<>();
li.addAll(2,li3);//将li3加到2的下标处
删除
E remove(int index)
li.add(2,"zxx");
System.out.println(li);
System.out.println(li.remove(li.indexOf("zxx")));
修改
E set(int index, E element)
li.set(li.indexOf("xz"), "阿兴");//将两个方法结合起来先查找下标,再修改
查询[遍历]
E get(int index)
String ss=li.get(0);
ListIterator listIterator() 列表迭代器
//LIstInterator<E> listIterator()
ListIterator<String> lli=li.listIterator();
while(lli.hasNext()){
String s=lli.next();
System.out.println(s);
}
ListIterator< E > listIterator(int index) 下面实现反输出时用到
获取E get(int index)
System.out.println(li.get(0));
int indexOf(Object o) //返回下标
int lastIndexOf(Object o) //从后往前找o的下标
System.out.println(li.lastIndexOf("qw"));//从后往前找qw的下标
List subList(int fromIndex, int toIndex)
//取子集合,左闭右开,从第几个开始,第几个结尾
List<String> sub=li.subList(1, 3);//左闭右开,第几个开始,第几个结尾
System.out.println(sub);
String []li2=li.toArray(new String[]{});
for (String string : li2) {
System.out.println(string);
}
previous()找前一个元素 haspervious() 判断前一位是否有数
与之相反的是next()和hasNext() 详情参考下面案例:
将所有的王昭君取出来,且逆序打印
s=lli.previous();//找前一个元素,有局限,因为迭代器遍历最开始为0,没有前一个元素
System.out.println(s);
利用列表迭代器实现反输出:
ListIterator<String> lli2=li.listIterator(li.size());
//因为它访问的是前一个元素,所以用的不是size-1
//将迭代器指向最后一个的后一位
while(lli2.hasPrevious()){
String ss1= lli2.previous();
System.out.println(ss1);
}
有条件删除list集合中的元素
方法一:
//利用迭代器实现删除(迭代器查找、迭代器删除)
ListIterator<String> l=li.listIterator();
while(l.hasNext()){
String s=l.next();
if(s.equals("阿兴"))
l.remove();//直接删除比较的元素
}
System.out.println(li);
方法二
//利用for循环和li集合删除元素
String []arrs=li.toArray(new String[]{});
for(int i=0;i<li.size();i++){
if(li.get(i).equals("阿兴")){
li.remove(li.indexOf("as"));//remove中只能放int型
}
}
如果是对象的删除呢?
ii2=l.listIterator();
/*while(ii2.hasNext()){
Student s=ii2.next();
if(s.name.equals("lb")){//利用对象的名字equals就很稳!
ii2.remove();
}
}*/
案例:将所有的王昭君取出来,且逆序打印
List<String> ls=new ArrayList<String>();
ls.add("杨贵妃");
ls.add("貂蝉");
ls.add("西施");
ls.add("王昭君1");
ls.add("王昭君2");
ls.add("王昭君3");
ls.add("王昭君4");
ls.add("貂蝉");
ls.add("催化");
//目的将所有的王昭君取出来,且逆序打印
//子集合:
List<String> lss=ls.subList(ls.indexOf("王昭君1"), ls.lastIndexOf("貂蝉"));
System.out.println(ls);
ListIterator<String> i=lss.listIterator(lss.size());//逆向输出
while(i.hasPrevious()){
String s=i.previous();
System.out.println(s);
}
集合利用简单选择去重
引言
List<String> list=new ArrayList<>();
list.add("xinxi");
list.add("小青");
list.add("xinxi");
list.add("小青");
list.add("xinxi");
//冒泡排序
Integer arr[]={5,9,2,1,6};
for(int i=0;i<5;i++){
for(int j=0;j<5-i-1;j++)
{
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.deepToString(arr));
简单选择 尽可能画图理解 跟冒泡不同
for(int i=0;i<list.size();i++)
{
for(int j=i+1;j<list.size();j++){
if(list.get(i).equals(list.get(j)))
{
list.remove(j);
j--;
}
}
}
System.out.println(list);
//靠第一个和其后面的数比较,看图说话