「java点歌系统」java点歌系统代码映射
本篇文章给大家谈谈java点歌系统,以及java点歌系统代码映射对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java 集合,泛型
- 2、微信小程序校园点歌系统代码怎么用
- 3、KTV点歌系统如何实现?疑惑
- 4、ktv 点歌系统实现的原理 语言
- 5、我下载了一个ktv点歌系统java程序,不知道怎么用eclipse运行,求指导,没几分,多谢了
java 集合,泛型
要点: ArrayList不是唯一的集合
TreeSet以有序状态保持并可防止重复
HashMap可用成对的name/value来保存与取出
LinkedList针对经常插入或删除中间元素所设计的高效率集合
HashSet防止重复的集合,可快速地找寻相符的元素
LinkedHashMap类似HashMap,但可以记住元素插入的顺序,也可以设定成依照元
素上次存取的先后来排序
可以使用TreeSet或Collections.sort()方法来排序
ArrayList是最常用的泛型化类型,有两个关键部分:类的声明和新增元素的方
法的声明
Sort()方法只能接受Comparable对象的list
Collections.sort()会把list中的String依照字母排序
以泛型的观点来说,extend代表extend or implement,代表“是一个。。。”
,且适用于类和接口
调用单一参数的sort(List o)方法代表由list元素上的comparetTo()方法来决定
顺序。因此元素必须要实现Comparable这个接口
调用sort(List o,Comparator c)方法代表不会调用list元素的compareTo()方法
,而会使用Comparator的compare()方法,这意味着list元素不需要实现Comparable.
LIST:是一种索引位置的集合
SET:注重独一无二的性质,不允许重复的集合
MAP:使用成对的键值和数据值,值可重复,但KEY不可
如果foo与bar两对象相等,则foo.equals(bar)会返回true,且两者的hashCode()
也会返回相同的值。要让Set能把对象视为重复的,就必须让它们符合上面的条件。
hashCode()与equals()的相关规定:
1)如果两个对象相等,则hashcode必须也是相等的。
2)如果两个对象相等,对其中一个对象调用equals()必须返回true。也就是说
,若a.equals(b)则b.equals(a).
3)如果对象有相同的hashcode值,它们也不一定是相等的。但若两个对象相等
,则hashcode值一定是相等的。
4)因此若equals()被覆盖过,则hashcode()也必须被覆盖。
5)hashcode()的默认行为是对在heap上的对象产生独特的值.你没有override过
hashcode(),则该class的两个对象怎样都不会被认为是相同的。
6)equals()的默认行为是执行==的比较。也就是说会去测试两个引用是否对
上heap上同一个对象。如果equals()没有被覆盖过,两个对象永远都不会被视为相同的,
因为不同的对象有不同的字节组合。
a.equals()必须与a.hashCode()==b.hashCode()等值。
但a.hashCode()==b.hashCode()不一定要与a.equals()等值。
要使用TreeSet,下列其中一项必须为真:
TreeSet集合中的元素必须是有实现Comparable的类型
或
使用重载、取用Comparator参数的构造函数来创建TreeSet.
MAP中的元素实际上是两个对象,关键字和值。值可以重复,但是关键字不可。
如果方法的参数是Animal的数组,它也能够取用Animal次类型的数组。
也就是说,如果方法是这样声明的:void foo(Animal[] a){}
若Dog有extend过Animal,你就可以用下列的两种方式调用:
foo(anAnimalArray);
foo(aDogArray);
数组的类型是在运行期间检查的,但集合的类型检查只会发生在编译期间
在方法参数中使用万用字符时,编译器会阻止任何可能破坏引用参数所指集合的
行为。你能够使用list中任何元素的方法,但不能加入元素。也就是说,你可以操作集合
元素,但不能新增集合元素。如此才能保障执行期间的安全性,因为编译器会阻止执行期
的恐怖行动。所以下面这个程序是可以的:
for(Animal a:animals){
a.eat();
}
但这个就过不了编译:
animals.add(new Cat());
--------------------
程序代码:
=========================================
SongList.txt
----------------------------------
Communication/The Cardingans
Black Dog/Led Zeppelin
Dreams/Van Halen
Comfortably Numb/Pink Floyd
Beth/Kiss
倒退噜/黄克林
=========================================
记录KTV最常点的歌,没有排序功能
import java.util.*;
import java.io.*;
public class Jukebox1{
//歌曲名称存在String的ArrayList上
ArrayListString songList= new ArrayListString();
public static void main(String[] args){
new Jukebox1.go();
}
//这个方法会载入文件并列出内容
public void go(){
getSongs();
System.out.println(songList);
}
//读取文件的程序
void getSongs(){
try{
File file=new File("SongList.txt");
BufferedReader reader=new BufferedReader(new
FileReader(file));
String line=null;
while(line=reader.readLine())!=null){
addSong(line);
}
}catch(Exception ex){ex.printStackTrace();}
}
void addSong(String lineToParse){
//split()方法会用反斜线来拆开歌曲内容
String[] tokens=lineToParse.split("/");
//因为只需要歌名,所以只取第一项加入SongList
songList.add(tokens[0]);
}
}
====
//依照加入的顺序列出,与原始的文本文件顺序相同。
输出:
%java Jukebox1
[Communication,Black Dog,Dreams,Comfortably Numb,Beth,倒退噜]
-----------------------------------------------------------------
对点歌系统加上Collections.sort()
import java.util.*;
import java.io.*;
public class Jukebox1{
//歌曲名称存在String的ArrayList上
ArrayListString songList= new ArrayListString();
public static void main(String[] args){
new Jukebox1.go();
}
//这个方法会载入文件并列出内容
public void go(){
getSongs();
System.out.println(songList);
Collections.sort()(songList);
System.out.println(songList);
}
//读取文件的程序
void getSongs(){
try{
File file=new File("SongList.txt");
BufferedReader reader=new BufferedReader(new
FileReader(file));
String line=null;
while(line=reader.readLine())!=null){
addSong(line);
}
}catch(Exception ex){ex.printStackTrace();}
}
void addSong(String lineToParse){
//split()方法会用反斜线来拆开歌曲内容
String[] tokens=lineToParse.split("/");
//因为只需要歌名,所以只取第一项加入SongList
songList.add(tokens[0]);
}
}
====
输出:
%java Jukebox1
[Communication,Black Dog,Dreams,Comfortably Numb,Beth,倒退噜]
[Beth,Black Dog,Comfortably Numb,Communication,Dreams,倒退噜]
-------------------------------------------------------------
现在要用song对象而不只是string
class Song{
//对应四种属性的四个实例变量
String title;
String artist;
String rating;
String bpm;
Song(String t, String a,String r,String b){
//变量都会在创建时从构造函数中设定
title=t;
artist=a;
rating=r;
bpm=b;
}
//四种属性的getter
public String getTitle(){
retrun title;
}
public String getArtist(){
retrun artist;
}
public String getRating(){
retrun rating;
}
public String getBpm(){
retrun bpm;
}
//将toString()覆盖过,让它返回歌名
public String toString(){
return title;
}
}
=========================================
SongList.txt
----------------------------------
Communication/The Cardingans/5/80
Black Dog/Led Zeppelin/4/84
Dreams/Van Halen/6/20
Comfortably Numb/Pink Floyd/5/110
Beth/Kiss/4/100
倒退噜/黄克林/5/90
=========================================
说明:新的歌曲文件带有四项属性,所以我们需要创建出Song的实例变量来带这些属性。
修改点歌系统程序
import java.util.*;
import java.io.*;
public class Jukebox1{
//将String改成Song类型
ArrayListSong songList= new ArrayListSong();
public static void main(String[] args){
new Jukebox1.go();
}
//这个方法会载入文件并列出内容
public void go(){
getSongs();
System.out.println(songList);
Collections.sort()(songList);
System.out.println(songList);
}
//读取文件的程序
void getSongs(){
try{
File file=new File("SongList.txt");
BufferedReader reader=new BufferedReader(new
FileReader(file));
String line=null;
while(line=reader.readLine())!=null){
addSong(line);
}
}catch(Exception ex){ex.printStackTrace();}
}
void addSong(String lineToParse){
//split()方法会用反斜线来拆开歌曲内容
String[] tokens=lineToParse.split("/");
//使用解析出来 的四项属性来创建Song对象并加入到list中
Song nextSong =new Song(tokens[0],tokens[1],tokens[2],tokens[3]);
songList.add(nextSong);
}
}
====
输出:
%javac Jukebox3.java
Jukebox3.java:15:cannot find symbol
symbol :method sort(java.util.ArrrayListSong)
location:class java.util.Collections
Collections.sort(songList);
1 error
关于泛型
1)创建被泛型化类的实例
创建ArrayList时你必须要指定它所容许的对象。
new ArrayListSong()
2)声明与指定泛型类型的变量
ListSong songList = new ArrayListSong()
3)声明(与调用)取用泛型类型的方法
void foo(ListSong list)
x.foo(songList)
---------------------------------------------
ArrayList的类型参数
下面这行程序:
ArrayListString thisList = new ArrayListString
代表这个ArrayList:
public class ArrayListE extends AbstractListE...{
public boolean add(E o)
//更多代码
}
会被编译器这样看待:
public class ArrayListString extends AbstractListString...{
public boolean add(String o)
//更多代码
}
-------------------------------------------------------------------
运用泛型的方法
1)使用定义在类声明的类型参数。
public class ArrayListE extends AbstractListE...{
public boolean add(E o)
}
2)使用未定义在类声明的类型参数
//T extends Animal 为方法声明的一部分,表示任何被声明为Animal或Animal的子型
public T extends Animal void takeThing(ArrayListT list)
//public void takeThing(ArrayListAnimal list)表示只有ArrayListAnimal合法。
-----------------------------------------------------------------------------
public static T extends Comparable? super T void sort(ListT list)
//T extends Comparable表示它必须是Comparable
//? super T表示Comparable的类型参数必须是T或T的父型
//ListT表示仅能传入继承Comparable的参数化类型的list
-----------------------------------------------------------------------------
class Song implements ComparableSong{
//对应四种属性的四个实例变量
String title;
String artist;
String rating;
String bpm;
//Song s为要比较的对象
public int compareTo(Song s){
return title.compareTo(s.getTitle());
}
Song(String t, String a,String r,String b){
//变量都会在创建时从构造函数中设定
title=t;
artist=a;
rating=r;
bpm=b;
}
//四种属性的getter
public String getTitle(){
retrun title;
}
public String getArtist(){
retrun artist;
}
public String getRating(){
retrun rating;
}
public String getBpm(){
retrun bpm;
}
//将toString()覆盖过,让它返回歌名
public String toString(){
return title;
}
}
====
调用sort()方法后会把Song依照字母作排序
输出:
%java Jukebox3
[Communication,Black Dog,Dreams,Comfortably Numb,Beth,倒退噜]
[Beth,Black Dog,Comfortably Numb,Communication,Dreams,倒退噜]
---------------------------------------------------------------
用Comparator更新点歌系统
我们在新版本做了三件事:
1)创建并实现Comparator的内部类,以compare()方法取代compareTo()方法
2)制作该类的实例
3)调用重载版的sort(),传入歌曲的list以及Comparator的实例。
import java.util.*;
import java.io.*;
public class Jukebox5{
//将String改成Song类型
ArrayListSong songList= new ArrayListSong();
public static void main(String[] args){
new Jukebox5.go();
}
//创建江实现Comparator的内部类,注意到类型参数和要比较的类型是相符的
//one.getArtist()会返回String,compareTo以String来比较
class ArtistCompare implements ComparatorSong{
public int compare(Song one,Song two){
return one.getArtist().compareTo(two.getArtist());
}
}
//这个方法会载入文件并列出内容
public void go(){
getSongs();
System.out.println(songList);
Collections.sort()(songList);
System.out.println(songList);
//创建Comparator的实例,调用sort(),传入list与Comparator对象
ArtistCompare artistCompare = new ArtistCompare();
Collections.sort(songList,artistCompare);
System.out.println(songList);
}
//读取文件的程序
void getSongs(){
try{
File file=new File("SongList.txt");
BufferedReader reader=new BufferedReader(new
FileReader(file));
String line=null;
while(line=reader.readLine())!=null){
addSong(line);
}
}catch(Exception ex){ex.printStackTrace();}
}
void addSong(String lineToParse){
//split()方法会用反斜线来拆开歌曲内容
String[] tokens=lineToParse.split("/");
//使用解析出来 的四项属性来创建Song对象并加入到list中
Song nextSong =new Song(tokens[0],tokens[1],tokens[2],tokens[3]);
songList.add(nextSong);
}
}
-----------------------------------------------------------------
以HashSet取代ArrayList
import java.util.*;
import java.io.*;
public class Jukebox6{
ArrayListSong songList= new ArrayListSong();
public static void main(String[] args){
new Jukebox6.go();
}
public void go(){
//这个方法没有更新,所以它还是会把Song加到ArrayList中
getSongs();
System.out.println(songList);
Collections.sort()(songList);
System.out.println(songList);
//创建参数化的HashSet来保存Song,addAll()可以复制其他集合的元素
HashSetSong songSet = new HashSetSong();
songSet.addAll(songList);
System.out.println(songSet);
}
//getSongs() and addSong() methods
}
-------------------------------------------------------------------
有覆盖过hashCode()与equals()的Song类
class Song{
String title;
String artist;
String rating;
String bpm;
//Object aSong为要比较的对象
public boolean equals(Object aSong){
Song s = (Song) aSong;
//因为歌名是String,且String本来就喜笑颜开过的equals(),所以我们可调用
return getTitle().equals(s.getTitle());
}
public int hashCode(){
//String也有覆盖过的hashCode(),注意到hashCode()与
//equals()使用相同的实例变量
return title.hashCode();
}
public int compareTo(Song s){
return title.compareTo(s.getTitle());
}
Song(String t, String a,String r,String b){
//变量都会在创建时从构造函数中设定
title=t;
artist=a;
rating=r;
bpm=b;
}
//四种属性的getter
public String getTitle(){
retrun title;
}
public String getArtist(){
retrun artist;
}
public String getRating(){
retrun rating;
}
public String getBpm(){
retrun bpm;
}
//将toString()覆盖过,让它返回歌名
public String toString(){
return title;
}
}
-----------------------------------------------------------
如果想要保持有序,使用TreeSet
import java.util.*;
import java.io.*;
public class Jukebox8{
ArrayListSong songList= new ArrayListSong();
int val;
public static void main(String[] args){
new Jukebox8.go();
}
public void go(){
getSongs();
System.out.println(songList);
Collections.sort()(songList);
System.out.println(songList);
//调用没有参数的构造函数来用TreeSet取代HashSet意味着
//以对象的compareTo()方法来进行排序
TreeSetSong songSet = new TreeSetSong();
//使用addAll()可以把对象全部加入
songSet.addAll(songList);
System.out.println(songList);
}
//读取文件的程序
void getSongs(){
try{
File file=new File("SongList.txt");
BufferedReader reader=new BufferedReader(new
FileReader(file));
String line=null;
while(line=reader.readLine())!=null){
addSong(line);
}
}catch(Exception ex){ex.printStackTrace();}
}
void addSong(String lineToParse){
//split()方法会用反斜线来拆开歌曲内容
String[] tokens=lineToParse.split("/");
//使用解析出来 的四项属性来创建Song对象并加入到list中
Song nextSong =new Song(tokens[0],tokens[1],tokens[2],tokens[3]);
songList.add(nextSong);
}
}
-----------------------------------
public T extends Animal void takeThing(ArrayListT list)
与
public void takeThing(ArrayList? extends Animallist)是一样的~
微信小程序校园点歌系统代码怎么用
点击系统,提交歌名即可。
计算机JAVA微信小程序的校园点歌系统,基于协同过滤算法 根据用户点歌行为 对用户点歌进行推荐,点击进入,根据系相关提示提交。
微信小程序校园点歌系统小程序为广州星光汇诚科技有限公司的千云校园(广播)系统生态小程序,依托于该系统。使用微信扫描页面上方二维码进点歌服务小程序,在微信中搜索点歌服务即可进入小程序。
KTV点歌系统如何实现?疑惑
KTV点唱系统是一个应用软件,是基于XP或2003上,看你选择,网上有卖钱的,也有破解版的,
ktv 点歌系统实现的原理 语言
这跟网站是一样的,需要一个服务器,然后每个房间都是客户端,只是鼠标是触摸的,其他的跟访问网站一样原理。 我现在正是在点歌这类的公司上班 现在
我下载了一个ktv点歌系统java程序,不知道怎么用eclipse运行,求指导,没几分,多谢了
如果目录里有个.project的文件多半是 eclipse工程,选导入工程就行了。要是没有就得建立一个工程然后导入文件系统了
java点歌系统的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java点歌系统代码映射、java点歌系统的信息别忘了在本站进行查找喔。
发布于:2022-12-01,除非注明,否则均为
原创文章,转载请注明出处。