12.08Java
今天学习了Java基本集合接口
public static void main(String[] args) {
int a[]= {3,4,1,8,7,9,10,2,5,6};
int b[]= new int[10];
System.arraycopy(a, 2, b, 7, 3);
Arrays.sort(a);
for (int i = 0; i < b.length; i++) {
System.out.print(b[i]+" ");
}
System.out.println();
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}
public static void main(String[] arg) {
int a[]= {1,2,5,6,8,7,9,4,3,10};
Arrays.sort(a);
for (int i= 0 ;i<a.length;i++ ) {
System.out.print(a[i]+" ");
}
int b=Arrays.binarySearch(a, 8);
// 返回查找元素的下标
System.out.println(b);
}
public static void main(String[] arg) {
int a[]= {1,2,5,6,8,7,9,4,3,10};
int b[]= {1,2,3};
int c[]= {1,2,3};
System.out.println(Arrays.equals(a, b));
System.out.println(Arrays.equals(c, b));
}
public static void main(String[] arg) {
ArrayList<String> a =new ArrayList<String>();
ArrayList<String> b =new ArrayList<String>();
a.add("aaa");
a.add("bbb");
a.add("ccc");
a.add("ddd");
b.add("123");
b.add("456");
b.add("789");
System.out.println(a);
System.out.println(b);
System.out.println("-----------------------------");
a.remove(0);
System.out.println(a);
System.out.println(a.contains("aaa"));
System.out.println(a.indexOf("ccc"));
System.out.println("-----------------------------");
a.addAll(b);
System.out.println(a);
a.removeAll(b);
a.removeAll(a);
System.out.println(a);
}
public static void main(String[] arg) {
ArrayList<String> a =new ArrayList<String>();
a.add("aaa");
a.add("bbb");
a.add("ccc");
a.add("ddd");
// 使用Iterator输出
Iterator<String> iter = a.iterator();
while(iter.hasNext()) {
System.out.print(iter.next()+" ");
}
System.out.println();
// 使用forEach输出
for (String s : a) {
System.out.print(s+" ");
}
System.out.println();
// 使用toString输出
System.out.println(a);
// 使用for循环输出
for (int i = 0; i < a.size(); i++) {
System.out.print(a.get(i)+" ");
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class HelloAdd {
static ArrayList playerArray= new ArrayList();
static List subListObj = new ArrayList();
public static void main(String[] args) {
add();
display();
System.out.println();
search();
System.out.println();
extract();
}
static void add() {
for (int i = 0; i < 5; i++) {
playerArray.add(new Integer(i));
}
playerArray.add("Martina");
playerArray.add("Serena");
playerArray.add("Venus");
playerArray.add("Serena");
}
static void display() {
System.out.println("**************************************");
System.out.println("从 ArrayList 中检索对象");
System.out.println("**************************************");
System.out.println();
for (int i = 0; i < playerArray.size(); i++)
System.out.print(" " + playerArray.get(i));
}
static void search() {
System.out.println("***********************************************************");
System.out.println("搜索一个对象并返回第一个和最后一个位置");
System.out.println("************************************************************");
System.out.println("字符串\"Serena\"第一次出现在位置是 "+ playerArray.indexOf("Serena"));
System.out.println("字符串\"Serena\"最后一次出现在位置是 "
+ playerArray.lastIndexOf("Serena"));
System.out.println();
}
static void extract() {
System.out.println("************************************************");
System.out.println("提取一个子列表,然后输出新列表");
System.out.println("*************************************************");
System.out.println();
subListObj = playerArray.subList(5, playerArray.size());
System.out.println("索引 5 至"+playerArray.size()+"的新子列表为:"
+ subListObj);
System.out.println();
}
}
public static void main(String[] args) {
// 案例1:编写一个交错合并列表元素的程序。
// 例如:给定的两个列表为[a,B,C]和[1,2,3],函数返回[a,1,B,2,C,3]。
// 若两个表元素个数不同,多余的附在合并表的尾
ArrayList<String> a = new ArrayList<String>();
ArrayList<String> b = new ArrayList<String>();
ArrayList<String> c = new ArrayList<String>();
a.add("a");
a.add("B");
a.add("C");
a.add("d");
a.add("e");
b.add("1");
b.add("2");
b.add("3");
int length = a.size()>b.size()?b.size():a.size();
for(int i = 0;i<length;i++) {
c.add(a.get(i));
c.add(b.get(i));
}
if(a.size()>b.size()) {
for(int i=b.size();i<a.size();i++) {
c.add(a.get(i));
}
}else if(a.size()<b.size()) {
for(int i=a.size();i<b.size();i++) {
c.add(b.get(i));
}
}
for (int i = 0; i < c.size(); i++) {
System.out.print(c.get(i)+" ");
}
}
public static void main(String[] args) {
// 案例2:编写一个计算斐波那契数的程序。根据定义,斐波那契序列的前两位数字是0和1,
// 随后的每个数字是前两个数字的和。要求输出直到某项的值刚大于10000的前面所有项。
// 例如,前11位(刚大于50的前所有项)斐波那契数为:0,1,1,2,3,5,8,13,21,34,55。
ArrayList<Integer> a = new ArrayList<>();
a.add(0);
a.add(1);
int count2 =0;
int count = 1;
for(int i=0;;i++) {
a.add(a.get(i)+a.get(i+1));
count+=a.get(i+2);
if(count>10000) {
count2 = count-a.get(i+2);
break;
}
}
System.out.println(count2+" "+count);
}
//法二:
public static void main(String[] args) {
// 创建一个存储斐波那契数列的ArrayList
ArrayList<Integer> fibonacciList = new ArrayList<>();
fibonacciList.add(0);
fibonacciList.add(1);
// 计算斐波那契数列
while (true) {
int nextFibonacci = fibonacciList.get(fibonacciList.size() - 1) + fibonacciList.get(fibonacciList.size() - 2);
if (nextFibonacci > 10000) {
break; // 如果当前数值大于10000,则退出循环
}
fibonacciList.add(nextFibonacci);
}
// 输出结果
System.out.println("斐波那契数列(直到大于10000的前面所有项)为:" + fibonacciList);
}
public static void main(String[] args) {
// 案例3:任意从键盘输入若干学生的成绩,当输入-1时,停止输入数据,计算这些数据的平均成绩,
// 并输出高于平均成绩的值。
// 分析:
// (1) 定义一个存放成绩的容器,每输入一个成绩,就将成绩添加到数组中,直到输入完成。
// (2)计算总成绩、平均成绩。
// (3)输出高于平均成绩的值。
Scanner cin = new Scanner(System.in);
double score = 0;
score = cin.nextDouble();
List<Double> arr = new ArrayList<>();
while(score!=-1) {
arr.add(score);
score = cin.nextDouble();
}
for (Double integer : arr) {
System.out.print(integer+" ");
}
System.out.println();
double sum = 0;
for(Double i:arr) {
sum+=i;
}
double average = sum/arr.size();
System.out.println("总成绩:"+sum+" "+"平均成绩:"+average);
System.out.println("高于平均成绩的:");
for(Double i : arr) {
if(i>average) {
System.out.println(i+" ");
}
}
cin.close();
}
public static void main(String[] args) {
LinkedList mylist = new LinkedList();
Student stu_1 = new Student("赵一", 9012, 80.0f),
stu_2 = new Student("钱二", 9013, 90.0f),
stu_3 = new Student("孙三", 9014, 78.0f),
stu_4 = new Student("周四", 9015, 55.0f);
mylist.add(stu_1);
mylist.add(stu_2);
mylist.add(stu_3);
mylist.add(stu_4);
Iterator<Student> iter = mylist.iterator();
while(iter.hasNext()) {
Student s = iter.next();
s.printStudent();
}
}
class Student {
private String name;
private int number;
private float score;
public Student(String name, int number, float score) {
this.name = name;
this.number = number;
this.score = score;
}
public void printStudent(){
System.out.println(name + " " +number + " " + score);
}
}
总结:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
public static void main(String[] args) {
// HashSet是Set接口的一个子类,主要的特点是:里面不能存放重复元素,
// 而且采用散列的存储方法,所以没有顺序。
// 这里所说的没有顺序是指:元素插入的顺序与输出的顺序不一致。
Set set1 = new HashSet();
set1.add("a");
set1.add("b");
set1.add("a");
set1.add("c");
set1.add("d");
Iterator iter = set1.iterator();
while(iter.hasNext()) {
System.out.print(iter.next()+" ");
}
}
//很巧妙的写法,把add写到if中去了。
public static void main(String[] args) {
HashSet set = new HashSet();
Scanner sc=new Scanner(System.in);
String ss=null;
ss=sc.next();
while(!ss.equals("end")) {
if (!set.add(ss))
System.out.println("重复的单词: "+ss);
ss=sc.next();
}
System.out.print("形成的集合为: "+set);
}
//常规写法
public static void main(String[] args) {
HashSet set = new HashSet();
Scanner sc=new Scanner(System.in);
String ss=null;
ss=sc.next();
while(true) {
ss = sc.next();
if(ss.equals("end")) {
break;
}
if(!set.contains(ss)) {
set.add(ss);
}else {
System.out.println("重复元素为:"+ss);
}
}
System.out.print("形成的集合为: "+set);
}
还有TreeSet和Map没有写