当前位置: 首页 > news >正文

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) {// 创建一个存储斐波那契数列的ArrayListArrayList<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.对于随机访问getsetArrayList绝对优于LinkedList,因为LinkedList要移动指针。

3.对于新增和删除操作addremoveLinedList比较占优势,因为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没有写

public static void main(String[] args) {
//	       TreeSet类创建的对象称为树集。树集是由一些节点对象组成的数据结构	
//	       节点按着树形一层一层的排列。
//	       树集是个有序集合,可以按照任何顺序将元素插入该集合,
//	       该元素将被纳入它的相应的排序位置;
//	       当迭代通过该集合时,各个值将自动按照排序后的顺序出现。Set s1 = new TreeSet();s1.add("bbb");s1.add("aaa");s1.add("ddd");s1.add("ccc");Iterator iter = s1.iterator();while(iter.hasNext()) {System.out.println(iter.next());}}
//输出:
//aaa
//bbb
//ccc
//ddd

一般,Java中通过接口实现两个对象的比较,比较常用就是Comparable接口和Comparator接口。首先类要实现接口,并且使用泛型规定要进行比较的对象所属的类,然后类实现了接口后,还需要实现接口定义的比较方法(compareTo方法或者compare方法),在这些方法中传入需要比较大小的另一个对象,通过选定的成员变量与之比较,如果大于则返回1,小于返回-1,相等返0。        

1ComparableComparator都是用来实现集合中元素的比较、排序的。        

2Comparable是在类内部定义的方法实现的排序,位于java.lang下。        

3Comparator是在类外部实现的排序,位于java.util下。        

4、实现Comparable接口需要覆盖compareTo方法,实现Comparator接口需要覆盖compare方法。

package edu.sdau;import java.util.TreeSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;public class HelloAdd {public static void main(String[] args) {TreeSet<Person> ts = new TreeSet<>();ts.add(new Person("Tom", 24));ts.add(new Person("Jerry", 21));ts.add(new Person("Brown", 26));ts.add(new Person("Bob", 28));ts.add(new Person("Brown", 21));ts.add(new Person("Brown", 21));Iterator<Person> it = ts.iterator();while (it.hasNext()) {Person p = it.next();System.out.println(p.getName() + ":" + p.getAge());}}}class Person implements Comparable<Person> {private String name;private int age;Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic int compareTo(Person p) {int temp1 = this.name.compareTo(p.name);return temp1 == 0 ? this.age - p.age : temp1; // 姓名相同时比较年龄}
}
package edu.sdau;import java.util.TreeSet;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;public class HelloAdd {public static void main(String[] args) {TreeSet<Student> set = new TreeSet<>(new StudentComparator());   set.add(new Student(80));   set.add(new Student(90));   set.add(new Student(60));   set.add(new Student(70));   System.out.println(set);   }}class Student {   int score;   public Student(int score) {   this.score = score;   }   public String toString() {   return String.valueOf(score);   }   
}   class StudentComparator implements Comparator<Student> {   // 按学生成绩升序    public int compare(Student s1, Student s2) {   return s1.score - s2.score;   }   
}  
package edu.sdau;import java.util.TreeSet;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;public class HelloAdd {public static void main(String[] args) {TreeSet ts = new TreeSet(new ComparatorByLength());ts.add("aaaaa");ts.add("abaaa");ts.add("zz");ts.add("nbaq");ts.add("cba");ts.add("abc");Iterator it = ts.iterator();while (it.hasNext()) {System.out.println(it.next());}}
}class ComparatorByLength implements Comparator{public int compare(Object o1,Object o2) {String s1 = (String)o1;String s2 = (String)o2;int temp = s1.length()-s2.length();return temp == 0?s1.compareTo(s2) : temp;}
//	这是一个三元表达式,它首先判断temp是否等于 0,也就是判断两个字符串长度是否相等。
//	如果temp等于 0,说明长度相等,此时通过调用s1的compareTo方法(比较字母)进一步比较
//	字符串内容的字典序,按照字典序比较的结果返回相应的值(小于返回负整数,
//	等于返回 0,大于返回正整数);如果temp不等于 0,直接返回temp,
//	也就是基于长度比较得出的差值,这个差值本身就体现了两个字符串某种程度上的 “大小” 关系,
//	长度长的字符串在这种比较逻辑下被认为 “更大”。
}

还有Map没写


http://www.mrgr.cn/news/79489.html

相关文章:

  • Representation + IL: Policy Contrastive Imitation Learning
  • Simdroid-EC:液冷仿真新星,助力新能源汽车电机控制器高效散热
  • 前端使用 Cursor 的最佳助手 - PromptCoder
  • python爬虫--小白篇【爬取B站视频】
  • 使用观测云排查数据库死锁故障
  • 黑马商城微服务复习(6)
  • 【时时三省】(NIT计算机考试)Word的使用方法
  • 巴特沃斯滤波器由模拟滤波器设计数字滤波器的双线性变换
  • 【论文阅读】体系结构模拟器在处理器设计过程中的作用
  • 扫二维码进小程序的指定页面
  • CODA 离线安装及虚幻镜迁移
  • uniapp扭蛋机组件
  • 关于GaussDB
  • 软件工程知识点
  • maven多模块开发
  • 电子商务人工智能指南 3/6 - 聊天机器人和客户服务
  • 快充诱骗协议芯片XSP08Q应用案例
  • pika:适用于大数据量持久化的类redis组件|简介及安装(一)
  • Qt之第三方库‌QXlsx使用(三)
  • shell脚本实战案例
  • UE_C++ —— 数据类型
  • 【动手学电机驱动】STM32-MBD(1)安装 STM32 硬件支持包
  • 使用IntelliJ IDEA开发Gradle插件并发布到本地
  • openharmony5.0版本源码一二级目录概览
  • 【C++游戏程序】easyX图形库还原游戏《贪吃蛇大作战》(三)
  • Scala-隐式转换